From a409d5beefe662afc3e54d92685a7823efff6c95 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Wed, 6 Nov 2019 23:01:20 -0800 Subject: [PATCH 01/75] Maybe native Proxy? --- addon/index.ts | 349 +++++++------- addon/types/index.ts | 12 +- addon/utils/set-nested-property.ts | 4 +- package.json | 7 +- yarn.lock | 713 ++++++++++++++++++++--------- 5 files changed, 688 insertions(+), 397 deletions(-) diff --git a/addon/index.ts b/addon/index.ts index c7702ed6..77b4939e 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -1,13 +1,9 @@ import { assert } from '@ember/debug'; -import EmberObject, { - get, - set, -} from '@ember/object'; import { not, readOnly, } from '@ember/object/computed'; -import Evented from '@ember/object/evented'; +// import Evented from '@ember/object/evented'; import { isEqual } from '@ember/utils'; @@ -52,9 +48,9 @@ const ERRORS = '_errors'; const VALIDATOR = '_validator'; const OPTIONS = '_options'; const RUNNING_VALIDATIONS = '_runningValidations'; -const BEFORE_VALIDATION_EVENT = 'beforeValidation'; -const AFTER_VALIDATION_EVENT = 'afterValidation'; -const AFTER_ROLLBACK_EVENT = 'afterRollback'; +// const BEFORE_VALIDATION_EVENT = 'beforeValidation'; +// const AFTER_VALIDATION_EVENT = 'afterValidation'; +// const AFTER_ROLLBACK_EVENT = 'afterRollback'; const defaultValidatorFn = () => true; const defaultOptions = { skipValidate: false }; @@ -71,41 +67,47 @@ export function changeset( ) { assert('Underlying object for changeset is missing', Boolean(obj)); - let changeset: any = { // ChangesetDef + class Buffered { + /** + * Any property that is not one of the getter/setter/methods on the + * BufferedProxy instance. The value type is `unknown` in order to avoid + * having to predefine key/value pairs of the correct types in the target + * object. Setting the index signature to `[key: string]: T[K]` would allow us + * to typecheck the value that is set on the proxy. However, no + * getters/setters/methods can be added to the class. This is the tradeoff + * we make for this particular design pattern (class based BufferedProxy). + */ + [key: string]: unknown; // notifyPropertyChange: (s: string) => void, // trigger: (k: string, v: string | void) => void, - __changeset__: CHANGESET, - - _content: {}, - _changes: {}, - _errors: {}, - _validator: defaultValidatorFn, - _options: defaultOptions, - _runningValidations: {}, - _bareChanges: transform(CHANGES, (c: Change) => c.value), - - changes: objectToArray(CHANGES, (c: Change) => c.value, false), - errors: objectToArray(ERRORS, (e: Err) => ({ value: e.value, validation: e.validation }), true), - change: inflate(CHANGES, (c: Change) => c.value), - error: inflate(ERRORS, (e: IErr) => ({ value: e.value, validation: e.validation })), - data: readOnly(CONTENT), - - isValid: isEmptyObject(ERRORS), - isPristine: isEmptyObject(CHANGES), - isInvalid: not('isValid').readOnly(), - isDirty: not('isPristine').readOnly(), - - init() { - let c: ChangesetDef = this; - c._super(...arguments); - c[CONTENT] = obj; - c[CHANGES] = {}; - c[ERRORS] = {}; - c[VALIDATOR] = validateFn; - c[OPTIONS] = pureAssign(defaultOptions, options); - c[RUNNING_VALIDATIONS] = {}; - }, + __changeset__ = CHANGESET; + + _content = {}; + _changes = {}; + _errors = {}; + _validator = defaultValidatorFn; + _options = defaultOptions; + _runningValidations = {}; + _bareChanges = transform(CHANGES, (c: Change) => c.value); + + changes = objectToArray(CHANGES, (c: Change) => c.value, false); + errors = objectToArray(ERRORS, (e: Err) => ({ value: e.value, validation: e.validation }), true); + change = inflate(CHANGES, (c: Change) => c.value); + error = inflate(ERRORS, (e: IErr) => ({ value: e.value, validation: e.validation })); + data = readOnly(CONTENT); + + isValid = isEmptyObject(ERRORS); + isPristine = isEmptyObject(CHANGES); + isInvalid = not('isValid').readOnly(); + isDirty = not('isPristine').readOnly(); + + CONTENT = obj; + CHANGES = {}; + ERRORS = {}; + VALIDATOR = validateFn; + OPTIONS = pureAssign(defaultOptions, options); + RUNNING_VALIDATIONS = {}; /** * Proxies `get` to the underlying content or changed value, if present. @@ -114,7 +116,7 @@ export function changeset( key: string ): any { return this._valueFor(key); - }, + } /** * Stores change on the changeset. @@ -124,30 +126,30 @@ export function changeset( setUnknownProperty ( key: string, value: T - ): Promise> | T | IErr | ValidationResult { - let config: Config = get(this, OPTIONS); - let skipValidate: boolean | undefined = get(config, 'skipValidate'); + ): void { + let config: Config = this[OPTIONS]; + let skipValidate: boolean | undefined = config['skipValidate']; if (skipValidate) { - let content: Content = get(this, CONTENT); - let oldValue = get(content, key); + let content: Content = this[CONTENT]; + let oldValue = content[key]; this._setProperty({ key, value, oldValue }); - return this._handleValidation(true, { key, value }); + this._handleValidation(true, { key, value }); } - let content: Content = get(this, CONTENT); - let oldValue: any = get(content, key); + let content: Content = this[CONTENT]; + let oldValue: any = content[key]; this._setProperty({ key, value, oldValue }); - return this._validateKey(key, value); - }, + this._validateKey(key, value); + } /** * String representation for the changeset. */ toString(): string { - let normalisedContent: object = pureAssign(get(this, CONTENT), {}); + let normalisedContent: object = pureAssign(this[CONTENT], {}); return `changeset:${normalisedContent.toString()}`; - }, + } /** * Provides a function to run before emitting changes to the model. The @@ -171,8 +173,8 @@ export function changeset( */ prepare( prepareChangesFn: PrepareChangesFn - ): ChangesetDef { - let changes: { [s: string]: any } = get(this, '_bareChanges'); + ): Buffered { + let changes: { [s: string]: any } = this['_bareChanges']; let preparedChanges = prepareChangesFn(changes); assert('Callback to `changeset.prepare` must return an object', isObject(preparedChanges)); @@ -184,24 +186,24 @@ export function changeset( return newObj; }, newObj); - set(this, CHANGES, newChanges); + this[CHANGES] = newChanges; return this; - }, + } /** * Executes the changeset if in a valid state. * * @method execute */ - execute(): ChangesetDef { - if (get(this, 'isValid') && get(this, 'isDirty')) { - let content: Content = get(this, CONTENT); - let changes: Changes = get(this, CHANGES); + execute(): Buffered { + if (this.isValid && this.isDirty) { + let content: Content = this[CONTENT]; + let changes: Changes = this[CHANGES]; keys(changes).forEach(key => deepSet(content, key, changes[key].value)); } return this; - }, + } /** * Executes the changeset and saves the underlying content. @@ -211,18 +213,18 @@ export function changeset( */ save( options: object - ): Promise { - let content: Content = get(this, CONTENT); - let savePromise: any | Promise = Promise.resolve(this); + ): Promise { + let content: Content = this[CONTENT]; + let savePromise: any | Promise = Promise.resolve(this); this.execute(); if (typeof content.save === 'function') { savePromise = content.save(options); - } else if (typeof get(content, 'save') === 'function') { + } else if (typeof content.save === 'function') { // we might be getting this off a proxy object. For example, when a // belongsTo relationship (a proxy on the parent model) // another way would be content(belongsTo).content.save - let saveFunc: Function | undefined = get(content, 'save'); + let saveFunc: Function = content.save; if (saveFunc) { savePromise = saveFunc(options); } @@ -232,7 +234,7 @@ export function changeset( this.rollback(); return result; }); - }, + } /** * Merges 2 valid changesets and returns a new changeset. Both changesets @@ -254,22 +256,22 @@ export function changeset( * @method merge */ merge( - changeset: ChangesetDef - ): ChangesetDef { - let content: Content = get(this, CONTENT); + changeset: Buffered + ): Buffered { + let content: Content = this[CONTENT]; assert('Cannot merge with a non-changeset', isChangeset(changeset)); - assert('Cannot merge with a changeset of different content', get(changeset, CONTENT) === content); + assert('Cannot merge with a changeset of different content', changeset[CONTENT] === content); - if (get(this, 'isPristine') && get(changeset, 'isPristine')) { + if (this.isPristine && changeset.isPristine) { return this; } - let c1: Changes = get(this, CHANGES); - let c2: Changes = get(changeset, CHANGES); - let e1: Errors = get(this, ERRORS); - let e2: Errors = get(changeset, ERRORS); + let c1: Changes = this[CHANGES]; + let c2: Changes = changeset[CHANGES]; + let e1: Errors = this[ERRORS]; + let e2: Errors = changeset[ERRORS]; - let newChangeset: any = new Changeset(content, get(this, VALIDATOR)); // ChangesetDef + let newChangeset: any = new Changeset(content, this[VALIDATOR]); // ChangesetDef let newErrors: Errors = objectWithout(keys(c2), e1); let newChanges: Changes = objectWithout(keys(e2), c1); let mergedErrors: Errors = mergeNested(newErrors, e2); @@ -279,7 +281,7 @@ export function changeset( newChangeset[CHANGES] = mergedChanges; newChangeset._notifyVirtualProperties(); return newChangeset; - }, + } /** * Returns the changeset to its pristine state, and discards changes and @@ -287,19 +289,19 @@ export function changeset( * * @method rollback */ - rollback(): ChangesetDef { + rollback(): Buffered { // Get keys before reset. - let c: ChangesetDef = this; + let c: Buffered = this; let keys = c._rollbackKeys(); // Reset. - set(this, CHANGES, {}); - set(this, ERRORS, {}); + this[CHANGES] = {}; + this[ERRORS] = {}; c._notifyVirtualProperties(keys) - c.trigger(AFTER_ROLLBACK_EVENT); + // c.trigger(AFTER_ROLLBACK_EVENT); return this; - }, + } /** * Discards any errors, keeping only valid changes. @@ -310,8 +312,8 @@ export function changeset( * @param {String} key optional key to rollback invalid values * @return {Changeset} */ - rollbackInvalid(key: string | void): ChangesetDef { - let errorKeys = keys(get(this, ERRORS)); + rollbackInvalid(key: string | void): Buffered { + let errorKeys = keys(this[ERRORS]); if (key) { this._notifyVirtualProperties([key]); @@ -321,7 +323,7 @@ export function changeset( } } else { this._notifyVirtualProperties(); - set(this, ERRORS, {}); + this[ERRORS] = {}; // if on CHANGES hash, rollback those as well errorKeys.forEach((errKey) => { @@ -330,7 +332,7 @@ export function changeset( } return this; - }, + } /** * Discards changes/errors for the specified properly only. @@ -341,12 +343,12 @@ export function changeset( * @param {String} key key to delete off of changes and errors * @return {Changeset} */ - rollbackProperty(key: string): ChangesetDef { + rollbackProperty(key: string): Buffered { this._deleteKey(CHANGES, key); this._deleteKey(ERRORS, key); return this; - }, + } /** * Validates the changeset immediately against the validationMap passed in. @@ -371,8 +373,8 @@ export function changeset( return Promise.all(maybePromise); } - return Promise.resolve(this._validateKey(key, this._valueFor(key))); - }, + return Promise.resolve(this._validateKey(key, this._valueFor(key))); + } /** * Manually add an error to the changeset. If there is an existing @@ -391,20 +393,20 @@ export function changeset( assert('Error must have validation.', error.hasOwnProperty('validation')); newError = new Err((>error).value, (>error).validation); } else { - newError = new Err(get(this, key), (error)); + newError = new Err(this.key, (error)); } // Add `key` to errors map. - let errors: Errors = get(this, ERRORS); + let errors: Errors = this[ERRORS]; setNestedProperty(errors, key, newError); - this.notifyPropertyChange(ERRORS); + // this.notifyPropertyChange(ERRORS); // Notify that `key` has changed. - this.notifyPropertyChange(key); + // this.notifyPropertyChange(key); // Return passed-in `error`. return error; - }, + } /** * Manually push multiple errors to the changeset as an array. @@ -415,10 +417,10 @@ export function changeset( key: keyof ChangesetDef, ...newErrors: string[] | ValidationErr[] ) { - let errors: Errors = get(this, ERRORS); + let errors: Errors = this[ERRORS]; let existingError: IErr | Err = errors[key] || new Err(null, []); let validation: ValidationErr | ValidationErr[] = existingError.validation; - let value: any = get(this, key); + let value: any = this[key] if (!Array.isArray(validation) && Boolean(validation)) { existingError.validation = [validation]; @@ -429,11 +431,11 @@ export function changeset( let newError = new Err(value, validation); setNestedProperty(errors, (key), newError); - this.notifyPropertyChange(ERRORS); - this.notifyPropertyChange((key)); + // this.notifyPropertyChange(ERRORS); + // this.notifyPropertyChange((key)); return { value, validation }; - }, + } /** * Creates a snapshot of the changeset's errors and changes. @@ -441,8 +443,8 @@ export function changeset( * @method snapshot */ snapshot(): Snapshot { - let changes: Changes = get(this, CHANGES); - let errors: Errors = get(this, ERRORS); + let changes: Changes = this[CHANGES]; + let errors: Errors = this[ERRORS]; return { changes: keys(changes).reduce((newObj: Changes, key: keyof Changes) => { @@ -456,7 +458,7 @@ export function changeset( return newObj; }, {}), }; - }, + } /** * Restores a snapshot of changes and errors. This overrides existing @@ -464,7 +466,7 @@ export function changeset( * * @method restore */ - restore({ changes, errors }: Snapshot): ChangesetDef { + restore({ changes, errors }: Snapshot): Buffered { validateNestedObj('snapshot.changes', changes); validateNestedObj('snapshot.errors', errors); @@ -479,12 +481,12 @@ export function changeset( return newObj; }, {}); - set(this, CHANGES, newChanges); - set(this, ERRORS, newErrors); + this[CHANGES] = newChanges; + this[ERRORS] = newErrors; this._notifyVirtualProperties(); return this; - }, + } /** * Unlike `Ecto.Changeset.cast`, `cast` will take allowed keys and @@ -493,8 +495,8 @@ export function changeset( * * @method cast */ - cast(allowed: string[] = []): ChangesetDef { - let changes: Changes = get(this, CHANGES); + cast(allowed: string[] = []): Buffered { + let changes: Changes = this[CHANGES]; if (Array.isArray(allowed) && allowed.length === 0) { return this; @@ -503,9 +505,9 @@ export function changeset( let changeKeys: string[] = keys(changes); let validKeys = changeKeys.filter((key: string) => allowed.includes(key)); let casted = take(changes, validKeys); - set(this, CHANGES, casted); + this[CHANGES] = casted; return this; - }, + } /** * Checks to see if async validator for a given key has not resolved. @@ -514,13 +516,13 @@ export function changeset( * @method isValidating */ isValidating(key: string | void): boolean { - let runningValidations: RunningValidations = get(this, RUNNING_VALIDATIONS); + let runningValidations: RunningValidations = this[RUNNING_VALIDATIONS]; let ks: string[] = keys(runningValidations); if (key) { return ks.includes(key); } return ks.length > 0; - }, + } /** * Validates a specific key @@ -532,12 +534,12 @@ export function changeset( key: string, value: T ): Promise> | T | IErr | ValidationResult { - let content: Content = get(this, CONTENT); - let oldValue: any = get(content, key); + let content: Content = this[CONTENT]; + let oldValue: any = content[key]; let validation: ValidationResult | Promise = this._validate(key, value, oldValue); - this.trigger(BEFORE_VALIDATION_EVENT, key); + // this.trigger(BEFORE_VALIDATION_EVENT, key); // TODO: Address case when Promise is rejected. if (isPromise(validation)) { @@ -545,18 +547,18 @@ export function changeset( return (>validation).then((resolvedValidation: ValidationResult) => { this._setIsValidating(key, false); - this.trigger(AFTER_VALIDATION_EVENT, key); + // this.trigger(AFTER_VALIDATION_EVENT, key); return this._handleValidation(resolvedValidation, { key, value }); }); } - let result = this._handleValidation(validation, { key, value }); + let result = this._handleValidation(validation, { key, value }); - this.trigger(AFTER_VALIDATION_EVENT, key); + // this.trigger(AFTER_VALIDATION_EVENT, key); return result; - }, + } /** * Takes resolved validation and adds an error or simply returns the value @@ -583,7 +585,7 @@ export function changeset( } return value; - }, + } /** * runs the validator with the key and value @@ -596,15 +598,15 @@ export function changeset( newValue: unknown, oldValue: unknown ): ValidationResult | Promise { - let validator: ValidatorAction = get(this, VALIDATOR); - let content: Content = get(this, CONTENT); + let validator: ValidatorAction = this[VALIDATOR]; + let content: Content = this[CONTENT]; if (typeof validator === 'function') { let isValid = validator({ key, newValue, oldValue, - changes: get(this, 'change'), + changes: this[CHANGES], content, }); @@ -612,7 +614,7 @@ export function changeset( } return true; - }, + } /** * Sets property or error on the changeset. @@ -621,7 +623,7 @@ export function changeset( _setProperty ( { key, value, oldValue }: NewProperty ): void { - let changes: Changes = get(this, CHANGES); + let changes: Changes = this[CHANGES]; // Happy path: update change map. if (!isEqual(oldValue, value)) { @@ -631,9 +633,9 @@ export function changeset( } // Happy path: notify that `key` was added. - this.notifyPropertyChange(CHANGES); - this.notifyPropertyChange(key); - }, + // this.notifyPropertyChange(CHANGES); + // this.notifyPropertyChange(key); + } /** * Increment or decrement the number of running validations for a @@ -643,8 +645,8 @@ export function changeset( key: string, value: boolean ): void { - let running: RunningValidations = get(this, RUNNING_VALIDATIONS); - let count: number = get(running, key) || 0; + let running: RunningValidations = this[RUNNING_VALIDATIONS]; + let count: number = running[key] || 0; if (!value && count === 1) { delete running[key]; @@ -652,7 +654,7 @@ export function changeset( } deepSet(running, key, value ? count+1 : count-1); - }, + } /** * Value for change or the original value. @@ -660,16 +662,16 @@ export function changeset( _valueFor( key: string ): any { - let changes: Changes = get(this, CHANGES); - let errors: Errors = get(this, ERRORS); - let content: Content = get(this, CONTENT); + let changes: Changes = this[CHANGES]; + let errors: Errors = this[ERRORS]; + let content: Content = this[CONTENT]; if (errors.hasOwnProperty(key)) { let e: Err = errors[key]; return e.value; } - let original: any = get(content, key); + let original: any = content[key]; if (changes.hasOwnProperty(key)) { let c: Change = changes[key]; @@ -685,13 +687,13 @@ export function changeset( if(!value) { return value; } - let result = get(value, keyParts.join('.')); + let result = value[keyParts.join('.')]; return result; } } return original; - }, + } /** * Notifies virtual properties set on the changeset of a change. @@ -707,17 +709,17 @@ export function changeset( if (!keys) { keys = this._rollbackKeys() } - (keys || []).forEach(key => this.notifyPropertyChange(key)); - }, + // (keys || []).forEach(key => this.notifyPropertyChange(key)); + } /** * Gets the changes and error keys. */ _rollbackKeys(): string[] { - let changes: Changes = get(this, CHANGES); - let errors: Errors = get(this, ERRORS); + let changes: Changes = this[CHANGES]; + let errors: Errors = this[ERRORS]; return [...new Set([...keys(changes), ...keys(errors)])]; - }, + } /** * Deletes a key off an object and notifies observers. @@ -726,40 +728,43 @@ export function changeset( objName: string, key = '' ): void { - let obj: InternalMap = get(this, objName); + let obj = this[objName] as InternalMap; if (obj.hasOwnProperty(key)) { delete obj[key]; } - let c: ChangesetDef = this; - c.notifyPropertyChange(`${objName}.${key}`); - c.notifyPropertyChange(objName); - }, + // let c: Buffered = this; + // this.notifyPropertyChange(`${objName}.${key}`); + // this.notifyPropertyChange(objName); + } get(key: string): any { - if (key.indexOf('.') > -1) { - // pull off changes hash with full key instead of - // breaking up key - return this.unknownProperty(key); - } else { - return this._super(...arguments); + if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { + let changes: Changes = this[CHANGES]; + return changes[key]; } - }, + + // return getters/setters/methods on BufferedProxy instance + if (this[key]) { + return this[key]; + } + + let content: Content = this[CONTENT]; + return content[key]; + } set ( key: string, value: T ): void | Promise> | T | IErr | ValidationResult { - if (key.indexOf('.') > -1) { - // Adds new CHANGE and avoids ember intenals setting directly on model - // TODO: overriding `set(changeset, )` doesnt work - return this.setUnknownProperty(key, value); - } else { - return this._super(...arguments); + if (this.hasOwnProperty(key)) { + this[key] = value; } + + return this.setUnknownProperty(key, value); } } - return EmberObject.extend(Evented, changeset); + return new Buffered(); } export default class Changeset { @@ -775,6 +780,18 @@ export default class Changeset { validationMap: ValidatorMap = {}, options: Config = {} ) { - return changeset(obj, validateFn, validationMap, options).create(); + const c = changeset(obj, validateFn, validationMap, options); + + return new Proxy(c, { + get(targetBuffer, key/*, receiver*/) { + const res = targetBuffer.get(key.toString()); + return res; + }, + + set(targetBuffer, key, value/*, receiver*/) { + targetBuffer.set(key.toString(), value); + return true; + } + }); } } diff --git a/addon/types/index.ts b/addon/types/index.ts index 9f02648c..ddd83d3f 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -89,12 +89,12 @@ export interface ChangesetDef extends Any { isInvalid: ComputedProperty, isDirty: ComputedProperty, - _super: (...args: Array) => void, - notifyPropertyChange: (s: string) => void, - trigger: (k: string, v?: string | void) => void, - init: () => void, - unknownProperty: (s: string) => any, - setUnknownProperty: (key: string, value: T) => (T | IErr | Promise | Promise> | ValidationResult), + // _super: (...args: Array) => void, + // notifyPropertyChange: (s: string) => void, + // trigger: (k: string, v?: string | void) => void, + // init: () => void, + // unknownProperty: (s: string) => any, + // setUnknownProperty: (key: string, value: T) => (T | IErr | Promise | Promise> | ValidationResult), get: (key: string) => any, set: (key: string, value: T) => (void | T | IErr | Promise | Promise> | ValidationResult), toString: () => string, diff --git a/addon/utils/set-nested-property.ts b/addon/utils/set-nested-property.ts index d4d26a78..7e9b2208 100644 --- a/addon/utils/set-nested-property.ts +++ b/addon/utils/set-nested-property.ts @@ -12,7 +12,7 @@ export default function setNestedProperty( obj: { [key: string]: T }, key: string, value: T -): T { +): { [key: string]: T } { let objKeys = keys(obj); // Ensure object keys are in correct format. @@ -37,5 +37,5 @@ export default function setNestedProperty( // Set value and return. obj[key] = value; - return value; + return obj; } diff --git a/package.json b/package.json index 073c7782..efb28b32 100644 --- a/package.json +++ b/package.json @@ -42,11 +42,10 @@ "@types/qunit": "^2.5.3", "@types/rsvp": "^4.0.2", "broccoli-asset-rev": "^2.7.0", - "ember-cli": "~3.8.3", + "ember-cli": "~3.13.1", "ember-cli-dependency-checker": "^2.0.0", "ember-cli-eslint": "^4.2.3", - "ember-cli-htmlbars": "^3.0.0", - "ember-cli-htmlbars-inline-precompile": "^1.0.3", + "ember-cli-htmlbars": "^4.0.0", "ember-cli-inject-live-reload": "^1.8.2", "ember-qunit": "^3.4.1", "ember-cli-release": "^1.0.0-beta.2", @@ -60,7 +59,7 @@ "ember-load-initializers": "^1.1.0", "ember-maybe-import-regenerator": "^0.1.6", "ember-resolver": "^5.0.1", - "ember-source": "~3.8.0", + "ember-source": "~3.14.0", "ember-source-channel-url": "^1.1.0", "ember-try": "^1.2.1", "eslint-plugin-ember": "^5.2.0", diff --git a/yarn.lock b/yarn.lock index a88af737..cf73a037 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,6 +29,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.5.5": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.2.tgz#ea5b99693bcfc058116f42fa1dd54da412b29d91" + integrity sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.2" + "@babel/helpers" "^7.7.0" + "@babel/parser" "^7.7.2" + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.7.2" + convert-source-map "^1.7.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@^7.6.3", "@babel/generator@^7.6.4": version "7.6.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" @@ -39,6 +59,16 @@ lodash "^4.17.13" source-map "^0.5.0" +"@babel/generator@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.2.tgz#2f4852d04131a5e17ea4f6645488b5da66ebf3af" + integrity sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ== + dependencies: + "@babel/types" "^7.7.2" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -101,6 +131,15 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-function-name@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz#44a5ad151cfff8ed2599c91682dda2ec2c8430a3" + integrity sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q== + dependencies: + "@babel/helper-get-function-arity" "^7.7.0" + "@babel/template" "^7.7.0" + "@babel/types" "^7.7.0" + "@babel/helper-get-function-arity@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" @@ -108,6 +147,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-get-function-arity@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz#c604886bc97287a1d1398092bc666bc3d7d7aa2d" + integrity sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw== + dependencies: + "@babel/types" "^7.7.0" + "@babel/helper-hoist-variables@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" @@ -196,6 +242,13 @@ dependencies: "@babel/types" "^7.4.4" +"@babel/helper-split-export-declaration@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz#1365e74ea6c614deeb56ebffabd71006a0eb2300" + integrity sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA== + dependencies: + "@babel/types" "^7.7.0" + "@babel/helper-wrap-function@^7.1.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" @@ -215,6 +268,15 @@ "@babel/traverse" "^7.6.2" "@babel/types" "^7.6.0" +"@babel/helpers@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.0.tgz#359bb5ac3b4726f7c1fde0ec75f64b3f4275d60b" + integrity sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g== + dependencies: + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + "@babel/highlight@^7.0.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" @@ -224,6 +286,11 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@babel/parser@^7.4.5", "@babel/parser@^7.7.0", "@babel/parser@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.2.tgz#ea8334dc77416bfd9473eb470fd00d8245b3943b" + integrity sha512-DDaR5e0g4ZTb9aP7cpSZLkACEBdoLGwJDWgHtBhrGX7Q1RjhdoMOfexICj5cqTAtpowjGQWfcvfnQG7G2kAB5w== + "@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4": version "7.6.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" @@ -368,7 +435,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.5.5", "@babel/plugin-transform-block-scoping@^7.6.3": +"@babel/plugin-transform-block-scoping@^7.5.5", "@babel/plugin-transform-block-scoping@^7.6.0", "@babel/plugin-transform-block-scoping@^7.6.3": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== @@ -457,7 +524,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-amd@^7.0.0", "@babel/plugin-transform-modules-amd@^7.2.0", "@babel/plugin-transform-modules-amd@^7.5.0": +"@babel/plugin-transform-modules-amd@^7.0.0", "@babel/plugin-transform-modules-amd@^7.5.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== @@ -507,6 +574,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-object-assign@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz#6fdeea42be17040f119e38e23ea0f49f31968bde" + integrity sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-object-super@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" @@ -689,6 +763,15 @@ "@babel/parser" "^7.6.0" "@babel/types" "^7.6.0" +"@babel/template@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.0.tgz#4fadc1b8e734d97f56de39c77de76f2562e597d0" + integrity sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/types" "^7.7.0" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" @@ -704,6 +787,21 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" + integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.2" + "@babel/helper-function-name" "^7.7.0" + "@babel/helper-split-export-declaration" "^7.7.0" + "@babel/parser" "^7.7.2" + "@babel/types" "^7.7.2" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" @@ -713,6 +811,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.7.0", "@babel/types@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.2.tgz#550b82e5571dcd174af576e23f0adba7ffc683f7" + integrity sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -1395,6 +1502,11 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +ast-types@0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" + integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== + ast-types@0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" @@ -1664,7 +1776,7 @@ babel-plugin-debug-macros@^0.2.0, babel-plugin-debug-macros@^0.2.0-beta.6: dependencies: semver "^5.3.0" -babel-plugin-debug-macros@^0.3.0, babel-plugin-debug-macros@^0.3.2: +babel-plugin-debug-macros@^0.3.0, babel-plugin-debug-macros@^0.3.2, babel-plugin-debug-macros@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.3.3.tgz#29c3449d663f61c7385f5b8c72d8015b069a5cb7" integrity sha512-E+NI8TKpxJDBbVkdWkwHrKgJi696mnRL8XYrOPYw82veNHPDORM9WIQifl6TpIo8PNy2tU2skPqbfkmHXrHKQA== @@ -1703,7 +1815,12 @@ babel-plugin-htmlbars-inline-precompile@^0.2.5: resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-0.2.6.tgz#c00b8a3f4b32ca04bf0f0d5169fcef3b5a66d69d" integrity sha512-H4H75TKGUFij8ukwEYWEERAgrUf16R8NSK1uDPe3QwxT8mnE1K8+/s6DVjUqbM5Pv6lSIcE4XufXdlSX+DTB6g== -babel-plugin-module-resolver@^3.1.1: +babel-plugin-htmlbars-inline-precompile@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-3.0.0.tgz#95aa0d2379347cda9a7127c028fe35cb39179fa2" + integrity sha512-dR12lOqIcBLOTwgnI5iG+bSrZhR8JIZ7zAHW43YhcD5q8G8iipvSuRo8Fah6NPPh6C8cATd827bgPikphbF09w== + +babel-plugin-module-resolver@^3.1.1, babel-plugin-module-resolver@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== @@ -2210,7 +2327,7 @@ bops@0.0.3: base64-js "0.0.2" to-utf8 "0.0.1" -bower-config@^1.3.0: +bower-config@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/bower-config/-/bower-config-1.4.1.tgz#85fd9df367c2b8dbbd0caa4c5f2bad40cd84c2cc" integrity sha1-hf2d82fCuNu9DKpMXyutQM2Ewsw= @@ -2293,7 +2410,7 @@ broccoli-babel-transpiler@^6.5.0: rsvp "^4.8.2" workerpool "^2.3.0" -broccoli-babel-transpiler@^7.1.1, broccoli-babel-transpiler@^7.3.0: +broccoli-babel-transpiler@^7.3.0: version "7.3.0" resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-7.3.0.tgz#a0ad3a37dbf74469664bbca403d652070c2c1317" integrity sha512-tsXNvDf3gp6g8rGkz234AhbaIRUsCdd6CM3ikfkJVB0EpC8ZAczGsFKTjENLy1etx4s7FkruW/QjI7Wfdhx6Ng== @@ -2357,7 +2474,7 @@ broccoli-clean-css@^1.1.0: inline-source-map-comment "^1.0.5" json-stable-stringify "^1.0.0" -broccoli-concat@^3.2.2, broccoli-concat@^3.7.3: +broccoli-concat@^3.2.2, broccoli-concat@^3.7.4: version "3.7.4" resolved "https://registry.yarnpkg.com/broccoli-concat/-/broccoli-concat-3.7.4.tgz#7371e846eb7a97cb44ccff10f68582bcadcafacd" integrity sha512-9gRv1tyCQuq2+48DT9DQyxRNLOuwDtHybDeYuWA3g26HFqZd0PGAOeXcLXHpKRhxzrEbU6Gm28dZ/KolMr04cQ== @@ -2538,7 +2655,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-middleware@^2.0.1: +broccoli-middleware@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/broccoli-middleware/-/broccoli-middleware-2.1.0.tgz#cbb458cb6360bdd79aa75a54057f10fe918157e6" integrity sha512-ymuDaxQBKG51hKfAeDf8G0Y70rRSPS5Pu77u5HO0YsYTSSAjdZuYT2ALIlWTm+MFXYRQJIlMsqDdDNBzsvy0BQ== @@ -2567,11 +2684,21 @@ broccoli-module-unification-reexporter@^1.0.0: mkdirp "^0.5.1" walk-sync "^0.3.2" -broccoli-node-info@1.1.0, broccoli-node-info@^1.1.0: +broccoli-node-api@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/broccoli-node-api/-/broccoli-node-api-1.7.0.tgz#391aa6edecd2a42c63c111b4162956b2fa288cb6" + integrity sha512-QIqLSVJWJUVOhclmkmypJJH9u9s/aWH4+FH6Q6Ju5l+Io4dtwqdPUNmDfw40o6sxhbZHhqGujDJuHTML1wG8Yw== + +broccoli-node-info@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/broccoli-node-info/-/broccoli-node-info-1.1.0.tgz#3aa2e31e07e5bdb516dd25214f7c45ba1c459412" integrity sha1-OqLjHgflvbUW3SUhT3xFuhxFlBI= +broccoli-node-info@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/broccoli-node-info/-/broccoli-node-info-2.1.0.tgz#ca84560e8570ff78565bea1699866ddbf58ad644" + integrity sha512-l6qDuboJThHfRVVWQVaTs++bFdrFTP0gJXgsWenczc1PavRVUmL1Eyb2swTAXXMpDOnr2zhNOBLx4w9AxkqbPQ== + 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" @@ -2591,7 +2718,7 @@ broccoli-persistent-filter@^1.1.6, broccoli-persistent-filter@^1.4.3: symlink-or-copy "^1.0.1" walk-sync "^0.3.1" -broccoli-persistent-filter@^2.1.1, broccoli-persistent-filter@^2.2.1, broccoli-persistent-filter@^2.3.1: +broccoli-persistent-filter@^2.2.1, broccoli-persistent-filter@^2.3.0, broccoli-persistent-filter@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz#4a052e0e0868b344c3a2977e35a3d497aa9eca72" integrity sha512-hVsmIgCDrl2NFM+3Gs4Cr2TA6UPaIZip99hN8mtkaUPgM8UeVnCbxelCvBjUBHo0oaaqP5jzqqnRVvb568Yu5g== @@ -2621,7 +2748,7 @@ broccoli-plugin@1.1.0: rimraf "^2.3.4" symlink-or-copy "^1.0.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== @@ -2631,7 +2758,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.0.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== @@ -2641,6 +2768,17 @@ broccoli-plugin@^2.0.0: rimraf "^2.3.4" symlink-or-copy "^1.1.8" +broccoli-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-3.0.0.tgz#516f2b550ffa2bb111bf54c1afb4bd0b2f02065b" + integrity sha512-aEtobBvzAlUIAaY5z+LwW2W3IJ9pruJtrT571CyfjoDFTGa8LZx0qjQG97Z7Guk5YzuxDoDNlM3hGsgBnnReTw== + dependencies: + broccoli-node-api "^1.6.0" + promise-map-series "^0.2.1" + quick-temp "^0.1.3" + rimraf "^2.3.4" + symlink-or-copy "^1.1.8" + broccoli-rollup@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/broccoli-rollup/-/broccoli-rollup-4.1.1.tgz#7531a24d88ddab9f1bace1c6ee6e6ca74a38d36f" @@ -2668,6 +2806,13 @@ broccoli-source@^1.1.0: resolved "https://registry.yarnpkg.com/broccoli-source/-/broccoli-source-1.1.0.tgz#54f0e82c8b73f46580cbbc4f578f0b32fca8f809" integrity sha1-VPDoLItz9GWAy7xPV48LMvyo+Ak= +broccoli-source@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/broccoli-source/-/broccoli-source-3.0.0.tgz#c7c9ba24505941b72a0244568285bc859f69dfbd" + integrity sha512-G4Zc8HngZIdASyQOiz/9H/0Gjc2F02EFwhWF4wiueaI+/FBrM9Ixj6Prno/1aiLIYcN0JvRC3oytN9uOVonTww== + dependencies: + broccoli-node-api "^1.6.0" + broccoli-sri-hash@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/broccoli-sri-hash/-/broccoli-sri-hash-2.1.2.tgz#bc69905ed7a381ad325cc0d02ded071328ebf3f3" @@ -2699,25 +2844,25 @@ broccoli-stew@^1.4.0: symlink-or-copy "^1.2.0" walk-sync "^0.3.0" -broccoli-stew@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-2.1.0.tgz#ba73add17fda3b9b01d8cfb343a8b613b7136a0a" - integrity sha512-tgCkuTWYl4uf7k7ib2D79KFEj2hCgnTUNPMnrCoAha0/4bywcNccmaZVWtL9Ex37yX5h5eAbnM/ak2ULoMwSSw== +broccoli-stew@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-3.0.0.tgz#fd1d19d162ad9490b42e5c563b78c26eb1e80b95" + integrity sha512-NXfi+Vas24n3Ivo21GvENTI55qxKu7OwKRnCLWXld8MiLiQKQlWIq28eoARaFj0lTUFwUa4jKZeA7fW9PiWQeg== dependencies: broccoli-debug "^0.6.5" broccoli-funnel "^2.0.0" broccoli-merge-trees "^3.0.1" - broccoli-persistent-filter "^2.1.1" - broccoli-plugin "^1.3.1" + broccoli-persistent-filter "^2.3.0" + broccoli-plugin "^2.1.0" chalk "^2.4.1" - debug "^3.1.0" + debug "^4.1.1" ensure-posix-path "^1.0.1" - fs-extra "^6.0.1" + fs-extra "^8.0.1" minimatch "^3.0.4" - resolve "^1.8.1" - rsvp "^4.8.4" + resolve "^1.11.1" + rsvp "^4.8.5" symlink-or-copy "^1.2.0" - walk-sync "^0.3.3" + walk-sync "^1.1.3" broccoli-uglify-sourcemap@^2.1.1: version "2.2.0" @@ -2736,21 +2881,24 @@ broccoli-uglify-sourcemap@^2.1.1: walk-sync "^0.3.2" workerpool "^2.3.0" -broccoli@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/broccoli/-/broccoli-2.3.0.tgz#b3f71b2c3d02fc042988e208827a09c75dd7b350" - integrity sha512-TeYMYlCGFK8EGk4Wce1G1uU3i52+YxRqP3WPOVDojC1zUk+Gi40wHBzUT2fncQZDl26dmCQMNugtHKjvUpcGQg== +broccoli@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/broccoli/-/broccoli-3.2.0.tgz#6b5a89b8d6d0c733d39aa23ac5b43d85f56fafab" + integrity sha512-n58yqAbV2Zbg+HXmBGBOUoDOgbCM0hMJtqvnPDF89Jwk3ZBVhD5/UKW0diY6l3DbB5+j92NCDQVd9HqO+WYFYA== dependencies: - broccoli-node-info "1.1.0" + ansi-html "^0.0.7" + broccoli-node-info "^2.1.0" broccoli-slow-trees "^3.0.1" broccoli-source "^1.1.0" commander "^2.15.1" connect "^3.6.6" + console-ui "^3.0.4" esm "^3.2.4" findup-sync "^2.0.0" handlebars "^4.0.11" heimdalljs "^0.2.6" heimdalljs-logger "^0.1.9" + https "^1.0.0" mime-types "^2.1.19" promise.prototype.finally "^3.1.0" resolve-path "^1.4.0" @@ -2866,13 +3014,6 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" -calculate-cache-key-for-tree@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-1.2.3.tgz#5a5e4fcfa2d374a63e47fe967593f179e8282825" - integrity sha512-PPQorvdNw8K8k7UftCeradwOmKDSDJs8wcqYTtJPEt3fHbZyK8QsorybJA+lOmk0dgE61vX6R+5Kd3W9h4EMGg== - dependencies: - json-stable-stringify "^1.0.1" - calculate-cache-key-for-tree@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-2.0.0.tgz#7ac57f149a4188eacb0a45b210689215d3fef8d6" @@ -3190,7 +3331,7 @@ commander@^2.15.1, commander@^2.19.0, commander@^2.6.0, commander@^2.9.0, comman resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -common-tags@^1.4.0: +common-tags@^1.4.0, common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -3222,7 +3363,7 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.40.0 < 2" -compression@^1.7.3, compression@^1.7.4: +compression@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== @@ -3258,17 +3399,17 @@ config-chain@~1.1.9: ini "^1.3.4" proto-list "~1.2.1" -configstore@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" - integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ== +configstore@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.0.tgz#37de662c7a49b5fe8dbcf8f6f5818d2d81ed852b" + integrity sha512-eE/hvMs7qw7DlcB5JPRnthmrITuHMmACUJAp89v6PT6iOqzoLS7HRWhBtuHMlhNHo2AhUSA/3Dh1bKNJHcublQ== dependencies: - dot-prop "^4.1.0" + dot-prop "^5.1.0" graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" connect@^3.6.6: version "3.7.0" @@ -3285,7 +3426,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.0: +console-ui@^3.0.4, console-ui@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/console-ui/-/console-ui-3.1.1.tgz#681a0414e8b0a23ed679d0a2802e39d920801171" integrity sha512-22y+uk4AGq9quz6kofKQjkeCIAm86+MTxT/RZMFm8fMArP2lAkzxjUjNyrw7S6wXnnB+qRnC+/2ANMTke68RTQ== @@ -3327,6 +3468,13 @@ convert-source-map@^1.1.0, convert-source-map@^1.5.1: dependencies: safe-buffer "~5.1.1" +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -3411,10 +3559,10 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== d@1, d@^1.0.1: version "1.0.1" @@ -3589,12 +3737,12 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +dot-prop@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== dependencies: - is-obj "^1.0.0" + is-obj "^2.0.0" duplex@~1.0.0: version "1.0.0" @@ -3666,7 +3814,7 @@ ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6 ember-cli-version-checker "^2.1.2" semver "^5.5.0" -ember-cli-babel@^7.1.2, ember-cli-babel@^7.2.0, ember-cli-babel@^7.8.0: +ember-cli-babel@^7.1.2, ember-cli-babel@^7.11.0, ember-cli-babel@^7.8.0: version "7.12.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.12.0.tgz#064997d199384be8c88d251f30ef67953d3bddc5" integrity sha512-+EGQsbPvh19nNXHCm6rVBx2CdlxQlzxMyhey5hsGViDPriDI4PFYXYaFWdGizDrmZoDcG/Ywpeph3hl0NxGQTg== @@ -3730,7 +3878,7 @@ ember-cli-get-component-path-option@^1.0.0: resolved "https://registry.yarnpkg.com/ember-cli-get-component-path-option/-/ember-cli-get-component-path-option-1.0.0.tgz#0d7b595559e2f9050abed804f1d8eff1b08bc771" integrity sha1-DXtZVVni+QUKvtgE8djv8bCLx3E= -ember-cli-htmlbars-inline-precompile@^1.0.0, ember-cli-htmlbars-inline-precompile@^1.0.3: +ember-cli-htmlbars-inline-precompile@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-1.0.5.tgz#312e050c9e3dd301c55fb399fd706296cd0b1d6a" integrity sha512-/CNEqPxroIcbY6qejrt704ZaghHLCntZKYLizFfJ2esirXoJx6fuYKBY1YyJ8GOgjfbHHKjBZuK4vFFJpkGqkQ== @@ -3741,15 +3889,26 @@ ember-cli-htmlbars-inline-precompile@^1.0.0, ember-cli-htmlbars-inline-precompil heimdalljs-logger "^0.1.9" silent-error "^1.1.0" -ember-cli-htmlbars@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-3.1.0.tgz#87806c2a0bca2ab52d4fb8af8e2215c1ca718a99" - integrity sha512-cgvRJM73IT0aePUG7oQ/afB7vSRBV3N0wu9BrWhHX2zkR7A7cUBI7KC9VPk6tbctCXoM7BRGsCC4aIjF7yrfXA== +ember-cli-htmlbars@^4.0.0: + version "4.0.8" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-4.0.8.tgz#e87b62e7040bd478a2d007053bdb1644dd1685b0" + integrity sha512-B6fzlqmv2E2dl8P6UIYu3bY8nZU2kKfl1VkEIgxFAINfsu9fP65kX/bKzHqGhHF8nAtWBoXZWw6tomHKfUT/Jg== dependencies: + "@ember/edition-utils" "^1.1.1" + babel-plugin-htmlbars-inline-precompile "^3.0.0" + broccoli-debug "^0.6.5" broccoli-persistent-filter "^2.3.1" + broccoli-plugin "^3.0.0" + common-tags "^1.8.0" + ember-cli-babel-plugin-helpers "^1.1.0" + fs-copy-file-sync "^1.1.1" hash-for-dep "^1.5.1" + heimdalljs-logger "^0.1.10" json-stable-stringify "^1.0.1" - strip-bom "^3.0.0" + mkdirp "^0.5.1" + semver "^6.3.0" + strip-bom "^4.0.0" + walk-sync "^2.0.2" ember-cli-inject-live-reload@^1.8.2: version "1.10.2" @@ -3781,7 +3940,7 @@ 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-preprocess-registry@^3.1.2: +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" integrity sha512-60GYpw7VPeB7TvzTLZTuLTlHdOXvayxjAQ+IxM2T04Xkfyu75O2ItbWlftQW7NZVGkaCsXSRAmn22PG03VpLMA== @@ -3936,41 +4095,42 @@ ember-cli-version-checker@^3.1.2, ember-cli-version-checker@^3.1.3: resolve-package-path "^1.2.6" semver "^5.6.0" -ember-cli@~3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.8.3.tgz#52055f1fecc34e9bf862d1658ba5740ef0071d3a" - integrity sha512-Sh4k/zzhgTdvQLzwlPpZlsvVIhgwawCGc2Avm+BxNpT22zIR9nhCyKizww7afLMyGGtdfcJetzdEICDd7inUsg== +ember-cli@~3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.13.1.tgz#8daefb108130740cd79ad7e4e1c9138fb1f7313d" + integrity sha512-CMVLpJYseyCNmN2Tp3vTmTFTXPSZlMQB7q2uoZ+ZTKMgdQ4ekeceW9mVAC4XwXm2FW+v8liowP+co/Bu1xUbPg== dependencies: - "@babel/core" "^7.0.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" + "@babel/core" "^7.5.5" + "@babel/plugin-transform-modules-amd" "^7.5.0" amd-name-resolver "^1.3.1" - babel-plugin-module-resolver "^3.1.1" - bower-config "^1.3.0" + babel-plugin-module-resolver "^3.2.0" + bower-config "^1.4.1" bower-endpoint-parser "0.2.2" - broccoli "^2.0.0" + broccoli "^3.2.0" broccoli-amd-funnel "^2.0.1" - broccoli-babel-transpiler "^7.1.1" + broccoli-babel-transpiler "^7.3.0" broccoli-builder "^0.18.14" - broccoli-concat "^3.7.3" + broccoli-concat "^3.7.4" broccoli-config-loader "^1.0.1" broccoli-config-replace "^1.1.2" - broccoli-debug "^0.6.4" - broccoli-funnel "^2.0.1" + broccoli-debug "^0.6.5" + broccoli-funnel "^2.0.2" broccoli-funnel-reducer "^1.0.0" - broccoli-merge-trees "^3.0.0" - broccoli-middleware "^2.0.1" + broccoli-merge-trees "^3.0.2" + broccoli-middleware "^2.1.0" broccoli-module-normalizer "^1.3.0" broccoli-module-unification-reexporter "^1.0.0" - broccoli-source "^1.1.0" - broccoli-stew "^2.0.0" - calculate-cache-key-for-tree "^1.1.0" + broccoli-slow-trees "^3.0.1" + broccoli-source "^3.0.0" + broccoli-stew "^3.0.0" + calculate-cache-key-for-tree "^2.0.0" capture-exit "^2.0.0" chalk "^2.4.2" ci-info "^2.0.0" clean-base-url "^1.0.0" - compression "^1.7.3" - configstore "^4.0.0" - console-ui "^3.0.0" + compression "^1.7.4" + configstore "^5.0.0" + console-ui "^3.1.1" core-object "^3.1.5" dag-map "^2.0.2" diff "^4.0.1" @@ -3978,58 +4138,59 @@ ember-cli@~3.8.3: ember-cli-is-package-missing "^1.0.0" ember-cli-lodash-subset "^2.0.1" ember-cli-normalize-entity-name "^1.0.0" - ember-cli-preprocess-registry "^3.1.2" + ember-cli-preprocess-registry "^3.3.0" ember-cli-string-utils "^1.1.0" - ember-source-channel-url "^1.1.0" + ember-source-channel-url "^2.0.1" ensure-posix-path "^1.0.2" execa "^1.0.0" exit "^0.1.2" - express "^4.16.3" - filesize "^3.6.1" - find-up "^3.0.0" - find-yarn-workspace-root "^1.1.0" - fs-extra "^7.0.0" - fs-tree-diff "^1.0.0" - get-caller-file "^2.0.0" - git-repo-info "^2.0.0" - glob "^7.1.2" - heimdalljs "^0.2.5" - heimdalljs-fs-monitor "^0.2.2" - heimdalljs-graph "^0.3.4" - heimdalljs-logger "^0.1.9" + express "^4.16.4" + filesize "^4.1.2" + find-up "^4.1.0" + find-yarn-workspace-root "^1.2.1" + fs-extra "^8.1.0" + fs-tree-diff "^2.0.1" + get-caller-file "^2.0.5" + git-repo-info "^2.1.0" + glob "^7.1.4" + heimdalljs "^0.2.6" + heimdalljs-fs-monitor "^0.2.3" + heimdalljs-graph "^1.0.0" + heimdalljs-logger "^0.1.10" http-proxy "^1.17.0" inflection "^1.12.0" is-git-url "^1.0.0" isbinaryfile "^3.0.3" - js-yaml "^3.12.1" + js-yaml "^3.13.1" json-stable-stringify "^1.0.1" leek "0.0.24" - lodash.template "^4.4.0" - markdown-it "^8.4.2" + lodash.template "^4.5.0" + markdown-it "^9.0.1" markdown-it-terminal "0.1.0" minimatch "^3.0.4" - morgan "^1.9.0" - node-modules-path "^1.0.1" + morgan "^1.9.1" nopt "^3.0.6" npm-package-arg "^6.1.0" - portfinder "^1.0.15" + p-defer "^3.0.0" + portfinder "^1.0.21" promise-map-series "^0.2.3" + promise.prototype.finally "^3.1.0" quick-temp "^0.1.8" - resolve "^1.8.1" - rsvp "^4.8.3" - sane "^4.0.0" - semver "^5.5.0" - silent-error "^1.1.0" - sort-package-json "^1.15.0" + resolve "^1.12.0" + resolve-package-path "^1.2.7" + rsvp "^4.8.5" + sane "^4.1.0" + semver "^6.3.0" + silent-error "^1.1.1" + sort-package-json "^1.22.1" symlink-or-copy "^1.2.0" temp "0.9.0" - testem "^2.9.2" + testem "^2.17.0" tiny-lr "^1.1.1" - tree-sync "^1.2.2" + tree-sync "^2.0.0" uuid "^3.3.2" - validate-npm-package-name "^3.0.0" - walk-sync "^1.0.0" - watch-detector "^0.1.0" + walk-sync "^2.0.2" + watch-detector "^1.0.0" yam "^1.0.0" ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.2.0: @@ -4138,6 +4299,15 @@ ember-router-generator@^1.2.3: dependencies: recast "^0.11.3" +ember-router-generator@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-2.0.0.tgz#d04abfed4ba8b42d166477bbce47fccc672dbde0" + integrity sha512-89oVHVJwmLDvGvAUWgS87KpBoRhy3aZ6U0Ql6HOmU4TrPkyaa8pM0W81wj9cIwjYprcQtN9EwzZMHnq46+oUyw== + dependencies: + "@babel/parser" "^7.4.5" + "@babel/traverse" "^7.4.5" + recast "^0.18.1" + ember-source-channel-url@^1.0.1, ember-source-channel-url@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ember-source-channel-url/-/ember-source-channel-url-1.2.0.tgz#77eb9d0889e5f5370e6c70fcb2696c63ff4a34a1" @@ -4145,25 +4315,41 @@ ember-source-channel-url@^1.0.1, ember-source-channel-url@^1.1.0: dependencies: got "^8.0.1" -ember-source@~3.8.0: - version "3.8.3" - resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.8.3.tgz#831a4e792f06d1ff292595fad817eed8f2be9d0c" - integrity sha512-QPeBgszpL9N5TL8Dbq4fIpJyG9uiMP7+tST01/y86ToUHmYuCrEuGeHDWLM3qTG+eKczuqx1b5K18gyM9K5JeA== +ember-source-channel-url@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ember-source-channel-url/-/ember-source-channel-url-2.0.1.tgz#18b88f8a00b7746e7a456b3551abb3aea18729cc" + integrity sha512-YlLUHW9gNvxEaohIj5exykoTZb4xj9ZRTcR4J3svv9S8rjAHJUnHmqC5Fd9onCs+NGxHo7KwR/fDwsfadbDu5Q== dependencies: - broccoli-funnel "^2.0.1" + got "^8.0.1" + +ember-source@~3.14.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.14.1.tgz#f11f98dffa7b169a045590203fa15c3ad2098c34" + integrity sha512-UvgjF/I7jANBEjQWdxtL/luXn97ZtIL3QCsJnR7HIcwRg7JuIyz/kaT9gLOGMxWEnwu610gJ+Ic0h0dkgQqg2w== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.6.0" + "@babel/plugin-transform-object-assign" "^7.2.0" + "@ember/edition-utils" "^1.1.1" + babel-plugin-debug-macros "^0.3.3" + babel-plugin-filter-imports "^3.0.0" + broccoli-concat "^3.7.4" + broccoli-funnel "^2.0.2" broccoli-merge-trees "^3.0.2" - chalk "^2.3.0" - ember-cli-babel "^7.2.0" + chalk "^2.4.2" + ember-cli-babel "^7.11.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-version-checker "^2.1.0" - ember-router-generator "^1.2.3" + ember-cli-version-checker "^3.1.3" + ember-router-generator "^2.0.0" inflection "^1.12.0" - jquery "^3.3.1" - resolve "^1.9.0" + jquery "^3.4.1" + resolve "^1.11.1" + semver "^6.1.1" + silent-error "^1.1.1" ember-try-config@^3.0.0: version "3.0.0" @@ -4436,7 +4622,7 @@ espree@^3.5.4: acorn "^5.5.0" acorn-jsx "^3.0.0" -esprima@^4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -4573,7 +4759,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -express@^4.10.7, express@^4.16.3: +express@^4.10.7, express@^4.16.4: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -4741,10 +4927,10 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -filesize@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== +filesize@^4.1.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.2.1.tgz#ab1cb2069db5d415911c1a13e144c0e743bc89bc" + integrity sha512-bP82Hi8VRZX/TUBKfE24iiUGsB/sfm2WUrwTQyAzQrhO3V9IhcBBNBXMyzLY5orACxRyYJ3d2HeRVX+eFv4lmA== fill-range@^4.0.0: version "4.0.0" @@ -4789,14 +4975,15 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: - locate-path "^3.0.0" + locate-path "^5.0.0" + path-exists "^4.0.0" -find-yarn-workspace-root@^1.1.0: +find-yarn-workspace-root@^1.1.0, find-yarn-workspace-root@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== @@ -4895,6 +5082,11 @@ from2@^2.1.1: inherits "^2.0.1" readable-stream "^2.0.0" +fs-copy-file-sync@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fs-copy-file-sync/-/fs-copy-file-sync-1.1.1.tgz#11bf32c096c10d126e5f6b36d06eece776062918" + integrity sha512-2QY5eeqVv4m2PfyMiEuy9adxNP+ajf+8AR05cEi+OAzPcOj90hvFImeZhTmKLBgSd9EvG33jsD7ZRxsx9dThkQ== + fs-extra@^0.24.0: version "0.24.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.24.0.tgz#d4e4342a96675cb7846633a6099249332b539952" @@ -4923,15 +5115,6 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" - integrity sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -4941,6 +5124,15 @@ fs-extra@^7.0.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^8.0.1, fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -4958,16 +5150,6 @@ fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.4, fs-tree-diff@^0.5 path-posix "^1.0.0" symlink-or-copy "^1.1.8" -fs-tree-diff@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-1.0.2.tgz#0e2931733a85b55feb3472c0b89a20b0c03ac0de" - integrity sha512-Zro2ACaPVDgVOx9+s5s5AfPlAD0kMJdbwGvTGF6KC1SjxjiGWxJvV4mUTDkFVSy3OUw2C/f1qpdjF81hGqSBAw== - dependencies: - heimdalljs-logger "^0.1.7" - object-assign "^4.1.0" - path-posix "^1.0.0" - symlink-or-copy "^1.1.8" - fs-tree-diff@^2.0.0, fs-tree-diff@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz#343e4745ab435ec39ebac5f9059ad919cd034afa" @@ -5098,7 +5280,7 @@ generate-object-property@^1.1.0: dependencies: is-property "^1.0.0" -get-caller-file@^2.0.0: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -5158,7 +5340,7 @@ git-read-pkt-line@0.0.8: bops "0.0.3" through "~2.2.7" -git-repo-info@^2.0.0: +git-repo-info@^2.0.0, git-repo-info@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.1.tgz#220ffed8cbae74ef8a80e3052f2ccb5179aed058" integrity sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg== @@ -5316,6 +5498,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +graceful-fs@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + graceful-fs@~4.1.2: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" @@ -5478,7 +5665,7 @@ hawk@~3.1.0: hoek "2.x.x" sntp "1.x.x" -heimdalljs-fs-monitor@^0.2.2: +heimdalljs-fs-monitor@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/heimdalljs-fs-monitor/-/heimdalljs-fs-monitor-0.2.3.tgz#1aedd4b1c61d86c51f6141fb75c5a3350dc41b15" integrity sha512-fYAvqSP0CxeOjLrt61B4wux/jqZzdZnS2xfb2oc14NP6BTZ8gtgtR2op6gKFakOR8lm8GN9Xhz1K4A1ZvJ4RQw== @@ -5486,12 +5673,12 @@ heimdalljs-fs-monitor@^0.2.2: heimdalljs "^0.2.3" heimdalljs-logger "^0.1.7" -heimdalljs-graph@^0.3.4: - version "0.3.5" - resolved "https://registry.yarnpkg.com/heimdalljs-graph/-/heimdalljs-graph-0.3.5.tgz#420fbbc8fc3aec5963ddbbf1a5fb47921c4a5927" - integrity sha512-szOy9WZUc7eUInEBQEsoa1G2d+oYHrn6ndZPf76eh8A9ID1zWUCEEsxP3F+CvQx9+EDrg1srdyLUmfVAr8EB4g== +heimdalljs-graph@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/heimdalljs-graph/-/heimdalljs-graph-1.0.0.tgz#0059857952988e54f3a74bb23edaf669f8eaf6af" + integrity sha512-v2AsTERBss0ukm/Qv4BmXrkwsT5x6M1V5Om6E8NcDQ/ruGkERsfsuLi5T8jx8qWzKMGYlwzAd7c/idymxRaPzA== -heimdalljs-logger@^0.1.7, heimdalljs-logger@^0.1.9: +heimdalljs-logger@^0.1.10, heimdalljs-logger@^0.1.7, heimdalljs-logger@^0.1.9: version "0.1.10" resolved "https://registry.yarnpkg.com/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz#90cad58aabb1590a3c7e640ddc6a4cd3a43faaf7" integrity sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g== @@ -5612,6 +5799,11 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" + integrity sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q= + iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5916,10 +6108,10 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-object@^1.0.1: version "1.0.1" @@ -5989,7 +6181,7 @@ is-type@0.0.1: dependencies: core-util-is "~1.0.0" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -6065,7 +6257,7 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -jquery@^3.3.1: +jquery@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== @@ -6090,7 +6282,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.12.1, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.9.1: +js-yaml@^3.13.1, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.9.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -6291,13 +6483,12 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" + p-locate "^4.1.0" lockfile@~1.0.1: version "1.0.4" @@ -6560,7 +6751,7 @@ lodash.restparam@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= -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== @@ -6665,12 +6856,12 @@ make-array@^0.1.2: resolved "https://registry.yarnpkg.com/make-array/-/make-array-0.1.2.tgz#335e36ebb0c5a43154d21213a1ecaeae2a1bb3ef" integrity sha1-M14267DFpDFU0hIToeyuriobs+8= -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== +make-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" + integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== dependencies: - pify "^3.0.0" + semver "^6.0.0" makeerror@1.0.x: version "1.0.11" @@ -6702,7 +6893,7 @@ markdown-it-terminal@0.1.0: lodash.merge "^4.6.0" markdown-it "^8.3.1" -markdown-it@^8.3.1, markdown-it@^8.4.2: +markdown-it@^8.3.1: version "8.4.2" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ== @@ -6713,6 +6904,17 @@ markdown-it@^8.3.1, markdown-it@^8.4.2: mdurl "^1.0.1" uc.micro "^1.0.5" +markdown-it@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-9.1.0.tgz#df9601c168568704d554b1fff9af0c5b561168d9" + integrity sha512-xHKG4C8iPriyfu/jc2hsCC045fKrMQ0VexX2F1FGYiRxDxqMB2aAhF8WauJ3fltn2kb90moGBkiiEdooGIg55w== + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + matcher-collection@^1.0.0, matcher-collection@^1.0.5, matcher-collection@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.1.2.tgz#1076f506f10ca85897b53d14ef54f90a5c426838" @@ -6720,6 +6922,14 @@ matcher-collection@^1.0.0, matcher-collection@^1.0.5, matcher-collection@^1.1.1: dependencies: minimatch "^3.0.2" +matcher-collection@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-2.0.1.tgz#90be1a4cf58d6f2949864f65bb3b0f3e41303b29" + integrity sha512-daE62nS2ZQsDg9raM0IlZzLmI2u+7ZapXBwdoeBUKAYERPDDIc0qNqA8E0Rp2D+gspKR7BgIFP52GeujaGXWeQ== + dependencies: + "@types/minimatch" "^3.0.3" + minimatch "^3.0.2" + md5-hex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" @@ -6919,7 +7129,7 @@ moment-timezone@^0.3.0: resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== -morgan@^1.9.0: +morgan@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== @@ -7534,6 +7744,11 @@ p-cancelable@^0.4.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -7551,7 +7766,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: +p-limit@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== @@ -7565,12 +7780,12 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: - p-limit "^2.0.0" + p-limit "^2.2.0" p-timeout@^2.0.1: version "2.0.1" @@ -7645,6 +7860,11 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@1.0.1, path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -7721,7 +7941,7 @@ pluralize@^7.0.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== -portfinder@^1.0.15: +portfinder@^1.0.21: version "1.0.25" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== @@ -8074,6 +8294,16 @@ recast@^0.11.3: private "~0.1.5" source-map "~0.5.0" +recast@^0.18.1: + version "0.18.5" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.18.5.tgz#9d5adbc07983a3c8145f3034812374a493e0fe4d" + integrity sha512-sD1WJrpLQAkXGyQZyGzTM75WJvyAd98II5CHdK3IYbt/cZlU0UzCRVU11nUFNXX9fBVEt4E9ajkMjBlUlG+Oog== + dependencies: + ast-types "0.13.2" + esprima "~4.0.0" + private "^0.1.8" + source-map "~0.6.1" + redeyed@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a" @@ -8325,7 +8555,7 @@ resolve-from@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= -resolve-package-path@^1.0.11, resolve-package-path@^1.2.6: +resolve-package-path@^1.0.11, resolve-package-path@^1.2.6, resolve-package-path@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.7.tgz#2a7bc37ad96865e239330e3102c31322847e652e" integrity sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q== @@ -8353,7 +8583,7 @@ resolve@1.5.0: dependencies: path-parse "^1.0.5" -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0: +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== @@ -8506,7 +8736,7 @@ sane@^2.5.2: optionalDependencies: fsevents "^1.2.3" -sane@^4.0.0: +sane@^4.0.0, sane@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== @@ -8536,7 +8766,7 @@ semver@^4.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto= -semver@^6.0.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -8770,7 +9000,7 @@ sort-object-keys@^1.1.2: resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.2.tgz#d3a6c48dc2ac97e6bc94367696e03f6d09d37952" integrity sha1-06bEjcKsl+a8lDZ2luA/bQnTeVI= -sort-package-json@^1.15.0: +sort-package-json@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.22.1.tgz#384ce7a098cd13be4109800d5ce2f0cf7826052e" integrity sha512-uVINQraFQvnlzNHFnQOT4MYy0qonIEzKwhrI2yrTiQjNo5QF4h3ffrnCk7a95QAwoK/RdkO/w8W9tJIcaOWC7g== @@ -9034,10 +9264,10 @@ strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-eof@^1.0.0: version "1.0.0" @@ -9148,7 +9378,7 @@ terser@^3.7.5: source-map "~0.6.1" source-map-support "~0.5.10" -testem@^2.9.2: +testem@^2.17.0: version "2.17.0" resolved "https://registry.yarnpkg.com/testem/-/testem-2.17.0.tgz#1cb4a2a90524a088803dfe52fbf197a6fd73c883" integrity sha512-PLkIlT523w5rTJPWwR4TL1EiAEa941ECV7d4pMqsB0YdnH+sCTz0loWMKCUSdhR+VijveAZ6anE/JHehE7KqMQ== @@ -9241,6 +9471,13 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -9320,6 +9557,17 @@ tree-sync@^1.2.2: quick-temp "^0.1.5" walk-sync "^0.3.3" +tree-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-2.0.0.tgz#e51456731d5ac93b92f9a1d58dd383f76f0f2f39" + integrity sha512-AzeJnbmJjGVfWMTJ0T152fv8NDTbQc9ERY4nEs7Lmxd94Xah2bUS56+CcoTh6FB8qn2KjBMjC0mLNc731aVBqw== + dependencies: + debug "^2.2.0" + fs-tree-diff "^0.5.6" + mkdirp "^0.5.1" + quick-temp "^0.1.5" + walk-sync "^0.3.3" + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -9367,6 +9615,13 @@ type@^1.0.1: resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -9460,12 +9715,12 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: - crypto-random-string "^1.0.0" + crypto-random-string "^2.0.0" universalify@^0.1.0: version "0.1.2" @@ -9640,6 +9895,15 @@ walk-sync@^1.0.0, walk-sync@^1.1.3: ensure-posix-path "^1.1.0" matcher-collection "^1.1.1" +walk-sync@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-2.0.2.tgz#5ea8a28377c8be68c92d50f4007ea381725da14b" + integrity sha512-dCZkrxfHjPn7tIvdYrX3uMD/R0beVrHpA8lROQ5wWrl8psJgR6xwCkwqTFes0dNujbS2o/ITpvSYgIFsLsf13A== + dependencies: + "@types/minimatch" "^3.0.3" + ensure-posix-path "^1.1.0" + matcher-collection "^2.0.0" + walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -9658,6 +9922,16 @@ watch-detector@^0.1.0: semver "^5.4.1" silent-error "^1.1.0" +watch-detector@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/watch-detector/-/watch-detector-1.0.0.tgz#c7b722d8695fee9ab6071e0f38f258e6adb22609" + integrity sha512-siywMl3fXK30Tlpu/dUBHhlpxhQmHdguZ8OIb813eU9lrVmmsJa9k0+n1HtJ+7p3SzFCPq2XbmR3GUYpPC3TBA== + dependencies: + heimdalljs-logger "^0.1.10" + semver "^6.3.0" + silent-error "^1.1.1" + tmp "^0.1.0" + watch@~0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" @@ -9739,14 +10013,15 @@ wrappy@1, wrappy@~1.0.1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== +write-file-atomic@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.1.tgz#558328352e673b5bb192cf86500d60b230667d4b" + integrity sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw== dependencies: - graceful-fs "^4.1.11" imurmurhash "^0.1.4" + is-typedarray "^1.0.0" signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" write-file-atomic@~1.1.4: version "1.1.4" @@ -9778,10 +10053,10 @@ ws@~6.1.0: dependencies: async-limiter "~1.0.0" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== xmldom@^0.1.19: version "0.1.27" From 5ab3b652f7cb3a7d5fd19d9b9f730499b55e484d Mon Sep 17 00:00:00 2001 From: snewcomer Date: Thu, 7 Nov 2019 20:32:51 -0800 Subject: [PATCH 02/75] Some changes --- addon/helpers/changeset.ts | 2 +- addon/index.ts | 2 +- addon/types/index.ts | 2 +- addon/types/{validator-func.ts => validator-action.ts} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename addon/types/{validator-func.ts => validator-action.ts} (100%) diff --git a/addon/helpers/changeset.ts b/addon/helpers/changeset.ts index 1f77c730..4df59fa0 100644 --- a/addon/helpers/changeset.ts +++ b/addon/helpers/changeset.ts @@ -1,7 +1,7 @@ import { helper } from '@ember/component/helper'; import Changeset from 'ember-changeset'; import { Config } from 'ember-changeset/types/config'; -import { ValidatorAction, ValidatorMap } from 'ember-changeset/types/validator-func'; +import { ValidatorAction, ValidatorMap } from 'ember-changeset/types/validator-action'; import lookupValidator from 'ember-changeset/utils/validator-lookup'; import isChangeset from 'ember-changeset/utils/is-changeset'; import isPromise from 'ember-changeset/utils/is-promise'; diff --git a/addon/index.ts b/addon/index.ts index 77b4939e..9afd29d1 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -606,7 +606,7 @@ export function changeset( key, newValue, oldValue, - changes: this[CHANGES], + changes: this.change, content, }); diff --git a/addon/types/index.ts b/addon/types/index.ts index ddd83d3f..f7dcfb9f 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -2,7 +2,7 @@ import { ValidationErr, ValidationResult, } from 'ember-changeset/types/validation-result'; -import { ValidatorAction, ValidatorMapFunc, ValidatorMap } from 'ember-changeset/types/validator-func'; +import { ValidatorAction, ValidatorMapFunc, ValidatorMap } from 'ember-changeset/types/validator-action'; export { ValidatorAction, ValidatorMapFunc, ValidatorMap }; export { ValidationErr, ValidationResult }; diff --git a/addon/types/validator-func.ts b/addon/types/validator-action.ts similarity index 100% rename from addon/types/validator-func.ts rename to addon/types/validator-action.ts From 8e95c938a7c935957a2a14f6c042b8cdd3f62dec Mon Sep 17 00:00:00 2001 From: snewcomer Date: Thu, 7 Nov 2019 21:16:54 -0800 Subject: [PATCH 03/75] add evented decorator --- addon/-private/evented.ts | 44 ++++++++++++++++++++++++++++++++++ addon/-private/notifier.ts | 29 ++++++++++++++++++++++ addon/index.ts | 49 +++++++++++++++++++------------------- 3 files changed, 98 insertions(+), 24 deletions(-) create mode 100644 addon/-private/evented.ts create mode 100644 addon/-private/notifier.ts diff --git a/addon/-private/evented.ts b/addon/-private/evented.ts new file mode 100644 index 00000000..e74913d9 --- /dev/null +++ b/addon/-private/evented.ts @@ -0,0 +1,44 @@ +// This file add and removes listeners for specific events via `on` method +import Notifier from './notifier'; + +// interface IBase { +// on: Function, +// off: Function, +// trigger: Function, +// _eventedNotifiers: object +// } + +export default function addEvented(Base: T) { + return class extends Base { + on(eventName: string, callback: Function): void { + const notifier = notifierForEvent(this, eventName); + return notifier.addListener(callback); + } + + off(eventName: string, callback: Function) { + const notifier = notifierForEvent(this, eventName); + return notifier.removeListener(callback); + } + + trigger(eventName: string, ...args: any[]) { + const notifier = notifierForEvent(this, eventName); + if (notifier) { + notifier.trigger.apply(notifier, args); + } + } + } +} + +function notifierForEvent(object: IBase, eventName: string) { + if (object._eventedNotifiers === undefined) { + object._eventedNotifiers = {}; + } + + let notifier = object._eventedNotifiers[eventName]; + + if (!notifier) { + notifier = object._eventedNotifiers[eventName] = new Notifier(); + } + + return notifier; +} diff --git a/addon/-private/notifier.ts b/addon/-private/notifier.ts new file mode 100644 index 00000000..36fc9342 --- /dev/null +++ b/addon/-private/notifier.ts @@ -0,0 +1,29 @@ +// this statefull class holds and notifies + +export default class Notifier { + listeners: Function[] + + constructor() { + this.listeners = []; + } + + addListener(callback: Function) { + this.listeners.push(callback); + return () => this.removeListener(callback); + } + + removeListener(callback: Function) { + this.listeners; + + for (let i = 0; i < this.listeners.length; i++) { + if (this.listeners[i] === callback) { + this.listeners.splice(i, 1); + return; + } + } + } + + trigger(...args: any[]) { + this.listeners.slice(0).forEach(callback => callback(...args)); + } +} diff --git a/addon/index.ts b/addon/index.ts index 9afd29d1..385082b2 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -1,13 +1,14 @@ import { assert } from '@ember/debug'; +import EmberObject, { get } from '@ember/object'; import { not, readOnly, } from '@ember/object/computed'; -// import Evented from '@ember/object/evented'; import { isEqual } from '@ember/utils'; import Change from 'ember-changeset/-private/change'; +import addEvented from 'ember-changeset/-private/evented'; import Err from 'ember-changeset/-private/err'; import pureAssign from 'ember-changeset/utils/assign'; import inflate from 'ember-changeset/utils/computed/inflate'; @@ -48,9 +49,9 @@ const ERRORS = '_errors'; const VALIDATOR = '_validator'; const OPTIONS = '_options'; const RUNNING_VALIDATIONS = '_runningValidations'; -// const BEFORE_VALIDATION_EVENT = 'beforeValidation'; -// const AFTER_VALIDATION_EVENT = 'afterValidation'; -// const AFTER_ROLLBACK_EVENT = 'afterRollback'; +const BEFORE_VALIDATION_EVENT = 'beforeValidation'; +const AFTER_VALIDATION_EVENT = 'afterValidation'; +const AFTER_ROLLBACK_EVENT = 'afterRollback'; const defaultValidatorFn = () => true; const defaultOptions = { skipValidate: false }; @@ -67,7 +68,7 @@ export function changeset( ) { assert('Underlying object for changeset is missing', Boolean(obj)); - class Buffered { + class Buffered extends addEvented(EmberObject) { /** * Any property that is not one of the getter/setter/methods on the * BufferedProxy instance. The value type is `unknown` in order to avoid @@ -78,9 +79,9 @@ export function changeset( * we make for this particular design pattern (class based BufferedProxy). */ [key: string]: unknown; + notifyPropertyChange: (s: string) => void; + trigger: (k: string, v: string | void) => void; - // notifyPropertyChange: (s: string) => void, - // trigger: (k: string, v: string | void) => void, __changeset__ = CHANGESET; _content = {}; @@ -299,7 +300,7 @@ export function changeset( this[ERRORS] = {}; c._notifyVirtualProperties(keys) - // c.trigger(AFTER_ROLLBACK_EVENT); + c.trigger(AFTER_ROLLBACK_EVENT); return this; } @@ -399,10 +400,10 @@ export function changeset( // Add `key` to errors map. let errors: Errors = this[ERRORS]; setNestedProperty(errors, key, newError); - // this.notifyPropertyChange(ERRORS); + this.notifyPropertyChange(ERRORS); // Notify that `key` has changed. - // this.notifyPropertyChange(key); + this.notifyPropertyChange(key); // Return passed-in `error`. return error; @@ -431,8 +432,8 @@ export function changeset( let newError = new Err(value, validation); setNestedProperty(errors, (key), newError); - // this.notifyPropertyChange(ERRORS); - // this.notifyPropertyChange((key)); + this.notifyPropertyChange(ERRORS); + this.notifyPropertyChange((key)); return { value, validation }; } @@ -539,7 +540,7 @@ export function changeset( let validation: ValidationResult | Promise = this._validate(key, value, oldValue); - // this.trigger(BEFORE_VALIDATION_EVENT, key); + this.trigger(BEFORE_VALIDATION_EVENT, key); // TODO: Address case when Promise is rejected. if (isPromise(validation)) { @@ -547,7 +548,7 @@ export function changeset( return (>validation).then((resolvedValidation: ValidationResult) => { this._setIsValidating(key, false); - // this.trigger(AFTER_VALIDATION_EVENT, key); + this.trigger(AFTER_VALIDATION_EVENT, key); return this._handleValidation(resolvedValidation, { key, value }); }); @@ -555,7 +556,7 @@ export function changeset( let result = this._handleValidation(validation, { key, value }); - // this.trigger(AFTER_VALIDATION_EVENT, key); + this.trigger(AFTER_VALIDATION_EVENT, key); return result; } @@ -606,7 +607,7 @@ export function changeset( key, newValue, oldValue, - changes: this.change, + changes: get(this, 'change'), content, }); @@ -633,8 +634,8 @@ export function changeset( } // Happy path: notify that `key` was added. - // this.notifyPropertyChange(CHANGES); - // this.notifyPropertyChange(key); + this.notifyPropertyChange(CHANGES); + this.notifyPropertyChange(key); } /** @@ -709,7 +710,7 @@ export function changeset( if (!keys) { keys = this._rollbackKeys() } - // (keys || []).forEach(key => this.notifyPropertyChange(key)); + (keys || []).forEach(key => this.notifyPropertyChange(key)); } /** @@ -733,11 +734,11 @@ export function changeset( delete obj[key]; } // let c: Buffered = this; - // this.notifyPropertyChange(`${objName}.${key}`); - // this.notifyPropertyChange(objName); + this.notifyPropertyChange(`${objName}.${key}`); + this.notifyPropertyChange(objName); } - get(key: string): any { + getProperty(key: string): any { if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { let changes: Changes = this[CHANGES]; return changes[key]; @@ -764,7 +765,7 @@ export function changeset( } } - return new Buffered(); + return Buffered.create(); } export default class Changeset { @@ -784,7 +785,7 @@ export default class Changeset { return new Proxy(c, { get(targetBuffer, key/*, receiver*/) { - const res = targetBuffer.get(key.toString()); + const res = targetBuffer.getProperty(key.toString()); return res; }, From 90806487070d0c31a0413f5346315ca30d4d5d2a Mon Sep 17 00:00:00 2001 From: snewcomer Date: Mon, 11 Nov 2019 13:32:45 -0800 Subject: [PATCH 04/75] more improvements...still not working --- addon/-private/evented.ts | 31 +- addon/-private/notifier.ts | 3 +- addon/helpers/changeset-get.ts | 8 +- addon/helpers/changeset-set.ts | 6 +- addon/index.ts | 1257 ++++++++++++----------- addon/types/evented.ts | 13 + addon/types/index.ts | 32 +- addon/types/validator-action.ts | 4 +- addon/utils/computed/inflate.ts | 2 +- addon/utils/computed/is-empty-object.ts | 2 +- 10 files changed, 680 insertions(+), 678 deletions(-) create mode 100644 addon/types/evented.ts diff --git a/addon/-private/evented.ts b/addon/-private/evented.ts index e74913d9..a8a74342 100644 --- a/addon/-private/evented.ts +++ b/addon/-private/evented.ts @@ -1,35 +1,6 @@ -// This file add and removes listeners for specific events via `on` method import Notifier from './notifier'; -// interface IBase { -// on: Function, -// off: Function, -// trigger: Function, -// _eventedNotifiers: object -// } - -export default function addEvented(Base: T) { - return class extends Base { - on(eventName: string, callback: Function): void { - const notifier = notifierForEvent(this, eventName); - return notifier.addListener(callback); - } - - off(eventName: string, callback: Function) { - const notifier = notifierForEvent(this, eventName); - return notifier.removeListener(callback); - } - - trigger(eventName: string, ...args: any[]) { - const notifier = notifierForEvent(this, eventName); - if (notifier) { - notifier.trigger.apply(notifier, args); - } - } - } -} - -function notifierForEvent(object: IBase, eventName: string) { +export function notifierForEvent(object: any, eventName: string) { if (object._eventedNotifiers === undefined) { object._eventedNotifiers = {}; } diff --git a/addon/-private/notifier.ts b/addon/-private/notifier.ts index 36fc9342..ec33b2c2 100644 --- a/addon/-private/notifier.ts +++ b/addon/-private/notifier.ts @@ -1,6 +1,7 @@ // this statefull class holds and notifies +import { INotifier } from '../types/evented'; -export default class Notifier { +export default class Notifier implements INotifier { listeners: Function[] constructor() { diff --git a/addon/helpers/changeset-get.ts b/addon/helpers/changeset-get.ts index 6eed837c..a571e633 100644 --- a/addon/helpers/changeset-get.ts +++ b/addon/helpers/changeset-get.ts @@ -1,6 +1,6 @@ import Helper from '@ember/component/helper'; import { observer } from '@ember/object'; -import { ChangesetDef } from 'ember-changeset/types'; +import { IChangeset } from 'ember-changeset/types'; const CONTENT = '_content'; const CHANGES = '_changes'; @@ -12,9 +12,9 @@ export default class ChangesetGet extends Helper.extend({ this.recompute(); }) }) { - changeset: ChangesetDef | null = null; + changeset: IChangeset | null = null; - compute(this: ChangesetGet, [changeset, fieldPath]: [ChangesetDef, string]) { + compute(this: ChangesetGet, [changeset, fieldPath]: [IChangeset, string]) { if (this.changeset === null) { this.set('changeset', changeset); } @@ -23,6 +23,6 @@ export default class ChangesetGet extends Helper.extend({ return; } - return this.changeset.get(fieldPath); + return this.changeset.getProperty(fieldPath); } } diff --git a/addon/helpers/changeset-set.ts b/addon/helpers/changeset-set.ts index 69fddd9c..8003808c 100644 --- a/addon/helpers/changeset-set.ts +++ b/addon/helpers/changeset-set.ts @@ -1,5 +1,5 @@ import { helper } from '@ember/component/helper'; -import { ChangesetDef } from 'ember-changeset/types'; +import { IChangeset } from 'ember-changeset/types'; import isChangeset from 'ember-changeset/utils/is-changeset'; /** @@ -9,11 +9,11 @@ import isChangeset from 'ember-changeset/utils/is-changeset'; * @param params */ export function changesetSet( - [obj, path]: [ChangesetDef, string], + [obj, path]: [IChangeset, string], ): Function | void { if (isChangeset(obj)) { return (value: any) => { - return obj.set(path, value); + return obj.setProperty(path, value); } } } diff --git a/addon/index.ts b/addon/index.ts index 7dca350c..eda42686 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -8,7 +8,7 @@ import { isEqual } from '@ember/utils'; import Change from 'ember-changeset/-private/change'; -import addEvented from 'ember-changeset/-private/evented'; +import { notifierForEvent } from 'ember-changeset/-private/evented'; import Err from 'ember-changeset/-private/err'; import pureAssign from 'ember-changeset/utils/assign'; import inflate from 'ember-changeset/utils/computed/inflate'; @@ -31,6 +31,9 @@ import { Content, Errors, IErr, + IChangeset, + IEvented, + INotifier, InternalMap, NewProperty, PrepareChangesFn, @@ -55,717 +58,731 @@ const AFTER_ROLLBACK_EVENT = 'afterRollback'; const defaultValidatorFn = () => true; const defaultOptions = { skipValidate: false }; -/** - * Creates new changesets. - * - * @uses Ember.Evented - */ -export function changeset( - obj: object, - validateFn: ValidatorAction = defaultValidatorFn, - validationMap: ValidatorMap = {}, - options: Config = {} -) { - assert('Underlying object for changeset is missing', Boolean(obj)); +class Buffered extends EmberObject implements ChangesetDef, IEvented { + /** + * Any property that is not one of the getter/setter/methods on the + * BufferedProxy instance. The value type is `unknown` in order to avoid + * having to predefine key/value pairs of the correct types in the target + * object. Setting the index signature to `[key: string]: T[K]` would allow us + * to typecheck the value that is set on the proxy. However, no + * getters/setters/methods can be added to the class. This is the tradeoff + * we make for this particular design pattern (class based BufferedProxy). + */ + [key: string]: unknown; + + __changeset__ = CHANGESET; + + _eventedNotifiers = {}; + _content = {}; + _changes = {}; + _errors = {}; + _validator = defaultValidatorFn; + _options = defaultOptions; + _runningValidations = {}; + _bareChanges = transform(CHANGES, (c: Change) => c.value); + + on(eventName: string, callback: Function): INotifier { + const notifier = notifierForEvent(this, eventName); + return notifier.addListener(callback); + } - class Buffered extends addEvented(EmberObject) { - /** - * Any property that is not one of the getter/setter/methods on the - * BufferedProxy instance. The value type is `unknown` in order to avoid - * having to predefine key/value pairs of the correct types in the target - * object. Setting the index signature to `[key: string]: T[K]` would allow us - * to typecheck the value that is set on the proxy. However, no - * getters/setters/methods can be added to the class. This is the tradeoff - * we make for this particular design pattern (class based BufferedProxy). - */ - [key: string]: unknown; - notifyPropertyChange: (s: string) => void; - trigger: (k: string, v: string | void) => void; - - __changeset__ = CHANGESET; - - _content = {}; - _changes = {}; - _errors = {}; - _validator = defaultValidatorFn; - _options = defaultOptions; - _runningValidations = {}; - _bareChanges = transform(CHANGES, (c: Change) => c.value); - - changes = objectToArray(CHANGES, (c: Change) => c.value, false); - errors = objectToArray(ERRORS, (e: Err) => ({ value: e.value, validation: e.validation }), true); - change = inflate(CHANGES, (c: Change) => c.value); - error = inflate(ERRORS, (e: IErr) => ({ value: e.value, validation: e.validation })); - data = readOnly(CONTENT); - - isValid = isEmptyObject(ERRORS); - isPristine = isEmptyObject(CHANGES); - isInvalid = not('isValid').readOnly(); - isDirty = not('isPristine').readOnly(); - - CONTENT = obj; - CHANGES = {}; - ERRORS = {}; - VALIDATOR = validateFn; - OPTIONS = pureAssign(defaultOptions, options); - RUNNING_VALIDATIONS = {}; - - /** - * Proxies `get` to the underlying content or changed value, if present. - */ - unknownProperty( - key: string - ): any { - return this._valueFor(key); + off(eventName: string, callback: Function): INotifier { + const notifier = notifierForEvent(this, eventName); + return notifier.removeListener(callback); + } + + trigger(eventName: string, ...args: any[]): void { + const notifier = notifierForEvent(this, eventName); + if (notifier) { + notifier.trigger.apply(notifier, args); } + } - /** - * Stores change on the changeset. - * - * @method setUnknownProperty - */ - setUnknownProperty ( - key: string, - value: T - ): void { - let config: Config = this[OPTIONS]; - let skipValidate: boolean | undefined = config['skipValidate']; - - if (skipValidate) { - let content: Content = this[CONTENT]; - let oldValue = content[key]; - this._setProperty({ key, value, oldValue }); - this._handleValidation(true, { key, value }); - } + changes = objectToArray(CHANGES, (c: Change) => c.value, false); + errors = objectToArray(ERRORS, (e: Err) => ({ value: e.value, validation: e.validation }), true); + change = inflate(CHANGES, (c: Change) => c.value); + error = inflate(ERRORS, (e: IErr) => ({ value: e.value, validation: e.validation })); + data = readOnly(CONTENT); - let content: Content = this[CONTENT]; - let oldValue: any = content[key]; - this._setProperty({ key, value, oldValue }); - this._validateKey(key, value); - } + isValid = isEmptyObject(ERRORS); + isPristine = isEmptyObject(CHANGES); + isInvalid = not('isValid').readOnly(); + isDirty = not('isPristine').readOnly(); - /** - * String representation for the changeset. - */ - toString(): string { - let normalisedContent: object = pureAssign(this[CONTENT], {}); - return `changeset:${normalisedContent.toString()}`; - } + CONTENT = this.obj; + CHANGES = {}; + ERRORS = {}; + VALIDATOR = this.validateFn; + OPTIONS = pureAssign(defaultOptions, this.options as object); + RUNNING_VALIDATIONS = {}; - /** - * Provides a function to run before emitting changes to the model. The - * callback function must return a hash in the same shape: - * - * ``` - * changeset - * .prepare((changes) => { - * let modified = {}; - * - * for (let key in changes) { - * modified[underscore(key)] = changes[key]; - * } - * - * return modified; // { first_name: "Jim", last_name: "Bob" } - * }) - * .execute(); // execute the changes - * ``` - * - * @method prepare - */ - prepare( - prepareChangesFn: PrepareChangesFn - ): Buffered { - let changes: { [s: string]: any } = this['_bareChanges']; - let preparedChanges = prepareChangesFn(changes); - - assert('Callback to `changeset.prepare` must return an object', isObject(preparedChanges)); - validateNestedObj('preparedChanges', preparedChanges); - - let newObj: Changes = {}; - let newChanges: Changes = keys(preparedChanges).reduce((newObj: Changes, key: keyof Changes) => { - newObj[key] = new Change(preparedChanges[key]); - return newObj; - }, newObj); + /** + * Proxies `get` to the underlying content or changed value, if present. + */ + unknownProperty( + key: string + ): any { + return this._valueFor(key); + } - this[CHANGES] = newChanges; - return this; + /** + * Stores change on the changeset. + * + * @method setUnknownProperty + */ + setUnknownProperty ( + key: string, + value: T + ): void { + let config: Config = this[OPTIONS]; + let skipValidate: boolean | undefined = config['skipValidate']; + + if (skipValidate) { + let content: Content = this[CONTENT]; + let oldValue = content[key]; + this._setProperty({ key, value, oldValue }); + this._handleValidation(true, { key, value }); } - /** - * Executes the changeset if in a valid state. - * - * @method execute - */ - execute(): Buffered { - if (this.isValid && this.isDirty) { - let content: Content = this[CONTENT]; - let changes: Changes = this[CHANGES]; - keys(changes).forEach(key => deepSet(content, key, changes[key].value)); - } + let content: Content = this[CONTENT]; + let oldValue: any = content[key]; + this._setProperty({ key, value, oldValue }); + this._validateKey(key, value); + } - return this; - } + /** + * String representation for the changeset. + */ + toString(): string { + let normalisedContent: object = pureAssign(this[CONTENT], {}); + return `changeset:${normalisedContent.toString()}`; + } - /** - * Executes the changeset and saves the underlying content. - * - * @method save - * @param {Object} options optional object to pass to content save method - */ - save( - options: object - ): Promise { - let content: Content = this[CONTENT]; - let savePromise: any | Promise = Promise.resolve(this); - this.execute(); - - if (typeof content.save === 'function') { - savePromise = content.save(options); - } else if (typeof content.save === 'function') { - // we might be getting this off a proxy object. For example, when a - // belongsTo relationship (a proxy on the parent model) - // another way would be content(belongsTo).content.save - let saveFunc: Function = content.save; - if (saveFunc) { - savePromise = saveFunc(options); - } - } + /** + * Provides a function to run before emitting changes to the model. The + * callback function must return a hash in the same shape: + * + * ``` + * changeset + * .prepare((changes) => { + * let modified = {}; + * + * for (let key in changes) { + * modified[underscore(key)] = changes[key]; + * } + * + * return modified; // { first_name: "Jim", last_name: "Bob" } + * }) + * .execute(); // execute the changes + * ``` + * + * @method prepare + */ + prepare( + prepareChangesFn: PrepareChangesFn + ): ChangesetDef { + let changes: { [s: string]: any } = this['_bareChanges']; + let preparedChanges = prepareChangesFn(changes); + + assert('Callback to `changeset.prepare` must return an object', isObject(preparedChanges)); + validateNestedObj('preparedChanges', preparedChanges); + + let newObj: Changes = {}; + let newChanges: Changes = keys(preparedChanges).reduce((newObj: Changes, key: keyof Changes) => { + newObj[key] = new Change(preparedChanges[key]); + return newObj; + }, newObj); + + this[CHANGES] = newChanges; + return this; + } - return Promise.resolve(savePromise).then((result) => { - this.rollback(); - return result; - }); + /** + * Executes the changeset if in a valid state. + * + * @method execute + */ + execute(): ChangesetDef { + if (this.isValid && this.isDirty) { + let content: Content = this[CONTENT]; + let changes: Changes = this[CHANGES]; + keys(changes).forEach(key => deepSet(content, key, changes[key].value)); } - /** - * Merges 2 valid changesets and returns a new changeset. Both changesets - * must point to the same underlying object. The changeset target is the - * origin. For example: - * - * ``` - * let changesetA = new Changeset(user, validatorFn); - * let changesetB = new Changeset(user, validatorFn); - * changesetA.set('firstName', 'Jim'); - * changesetB.set('firstName', 'Jimmy'); - * changesetB.set('lastName', 'Fallon'); - * let changesetC = changesetA.merge(changesetB); - * changesetC.execute(); - * user.get('firstName'); // "Jimmy" - * user.get('lastName'); // "Fallon" - * ``` - * - * @method merge - */ - merge( - changeset: Buffered - ): Buffered { - let content: Content = this[CONTENT]; - assert('Cannot merge with a non-changeset', isChangeset(changeset)); - assert('Cannot merge with a changeset of different content', changeset[CONTENT] === content); + return this; + } - if (this.isPristine && changeset.isPristine) { - return this; + /** + * Executes the changeset and saves the underlying content. + * + * @method save + * @param {Object} options optional object to pass to content save method + */ + save( + options: object + ): Promise { + let content: Content = this[CONTENT]; + let savePromise: any | Promise = Promise.resolve(this); + this.execute(); + + if (typeof content.save === 'function') { + savePromise = content.save(options); + } else if (typeof content.save === 'function') { + // we might be getting this off a proxy object. For example, when a + // belongsTo relationship (a proxy on the parent model) + // another way would be content(belongsTo).content.save + let saveFunc: Function = content.save; + if (saveFunc) { + savePromise = saveFunc(options); } - - let c1: Changes = this[CHANGES]; - let c2: Changes = changeset[CHANGES]; - let e1: Errors = this[ERRORS]; - let e2: Errors = changeset[ERRORS]; - - let newChangeset: any = new Changeset(content, this[VALIDATOR]); // ChangesetDef - let newErrors: Errors = objectWithout(keys(c2), e1); - let newChanges: Changes = objectWithout(keys(e2), c1); - let mergedErrors: Errors = mergeNested(newErrors, e2); - let mergedChanges: Changes = mergeNested(newChanges, c2); - - newChangeset[ERRORS] = mergedErrors; - newChangeset[CHANGES] = mergedChanges; - newChangeset._notifyVirtualProperties(); - return newChangeset; } - /** - * Returns the changeset to its pristine state, and discards changes and - * errors. - * - * @method rollback - */ - rollback(): Buffered { - // Get keys before reset. - let c: Buffered = this; - let keys = c._rollbackKeys(); - - // Reset. - this[CHANGES] = {}; - this[ERRORS] = {}; - c._notifyVirtualProperties(keys) + return Promise.resolve(savePromise).then((result) => { + this.rollback(); + return result; + }); + } - c.trigger(AFTER_ROLLBACK_EVENT); + /** + * Merges 2 valid changesets and returns a new changeset. Both changesets + * must point to the same underlying object. The changeset target is the + * origin. For example: + * + * ``` + * let changesetA = new Changeset(user, validatorFn); + * let changesetB = new Changeset(user, validatorFn); + * changesetA.set('firstName', 'Jim'); + * changesetB.set('firstName', 'Jimmy'); + * changesetB.set('lastName', 'Fallon'); + * let changesetC = changesetA.merge(changesetB); + * changesetC.execute(); + * user.get('firstName'); // "Jimmy" + * user.get('lastName'); // "Fallon" + * ``` + * + * @method merge + */ + merge( + changeset: ChangesetDef + ): ChangesetDef { + let content: Content = this[CONTENT]; + assert('Cannot merge with a non-changeset', isChangeset(changeset)); + assert('Cannot merge with a changeset of different content', changeset[CONTENT] === content); + + if (this.isPristine && changeset.isPristine) { return this; } - /** - * Discards any errors, keeping only valid changes. - * - * @public - * @chainable - * @method rollbackInvalid - * @param {String} key optional key to rollback invalid values - * @return {Changeset} - */ - rollbackInvalid(key: string | void): Buffered { - let errorKeys = keys(this[ERRORS]); - - if (key) { - this._notifyVirtualProperties([key]); - this._deleteKey(ERRORS, key); - if (errorKeys.indexOf(key) > -1) { - this._deleteKey(CHANGES, key); - } - } else { - this._notifyVirtualProperties(); - this[ERRORS] = {}; - - // if on CHANGES hash, rollback those as well - errorKeys.forEach((errKey) => { - this._deleteKey(CHANGES, errKey); - }) - } + let c1: Changes = this[CHANGES]; + let c2: Changes = changeset[CHANGES]; + let e1: Errors = this[ERRORS]; + let e2: Errors = changeset[ERRORS]; + + let newChangeset: any = new Changeset(content, this[VALIDATOR]); // ChangesetDef + let newErrors: Errors = objectWithout(keys(c2), e1); + let newChanges: Changes = objectWithout(keys(e2), c1); + let mergedErrors: Errors = mergeNested(newErrors, e2); + let mergedChanges: Changes = mergeNested(newChanges, c2); + + newChangeset[ERRORS] = mergedErrors; + newChangeset[CHANGES] = mergedChanges; + newChangeset._notifyVirtualProperties(); + return newChangeset; + } - return this; - } + /** + * Returns the changeset to its pristine state, and discards changes and + * errors. + * + * @method rollback + */ + rollback(): ChangesetDef { + // Get keys before reset. + let c: Buffered = this; + let keys = c._rollbackKeys(); + + // Reset. + this[CHANGES] = {}; + this[ERRORS] = {}; + c._notifyVirtualProperties(keys) + + c.trigger(AFTER_ROLLBACK_EVENT); + return this; + } - /** - * Discards changes/errors for the specified properly only. - * - * @public - * @chainable - * @method rollbackProperty - * @param {String} key key to delete off of changes and errors - * @return {Changeset} - */ - rollbackProperty(key: string): Buffered { - this._deleteKey(CHANGES, key); + /** + * Discards any errors, keeping only valid changes. + * + * @public + * @chainable + * @method rollbackInvalid + * @param {String} key optional key to rollback invalid values + * @return {Changeset} + */ + rollbackInvalid(key: string | void): ChangesetDef { + let errorKeys = keys(this[ERRORS]); + + if (key) { + this._notifyVirtualProperties([key]); this._deleteKey(ERRORS, key); + if (errorKeys.indexOf(key) > -1) { + this._deleteKey(CHANGES, key); + } + } else { + this._notifyVirtualProperties(); + this[ERRORS] = {}; - return this; + // if on CHANGES hash, rollback those as well + errorKeys.forEach((errKey) => { + this._deleteKey(CHANGES, errKey); + }) } - /** - * Validates the changeset immediately against the validationMap passed in. - * If no key is passed into this method, it will validate all fields on the - * validationMap and set errors accordingly. Will throw an error if no - * validationMap is present. - * - * @method validate - */ - validate( - key?: string | undefined - ): Promise | Promise> | Promise>> { - if (keys(validationMap).length === 0) { - return Promise.resolve(null); - } + return this; + } - if (!Boolean(key)) { - let maybePromise = keys(validationMap).map(validationKey => { - return this._validateKey(validationKey, this._valueFor(validationKey)); - }); + /** + * Discards changes/errors for the specified properly only. + * + * @public + * @chainable + * @method rollbackProperty + * @param {String} key key to delete off of changes and errors + * @return {Changeset} + */ + rollbackProperty(key: string): ChangesetDef { + this._deleteKey(CHANGES, key); + this._deleteKey(ERRORS, key); - return Promise.all(maybePromise); - } + return this; + } - return Promise.resolve(this._validateKey(key, this._valueFor(key))); + /** + * Validates the changeset immediately against the validationMap passed in. + * If no key is passed into this method, it will validate all fields on the + * validationMap and set errors accordingly. Will throw an error if no + * validationMap is present. + * + * @method validate + */ + validate( + key?: string | undefined + ): Promise | Promise> | Promise>> { + if (keys(this.validationMap as object).length === 0) { + return Promise.resolve(null); } - /** - * Manually add an error to the changeset. If there is an existing - * error or change for `key`, it will be overwritten. - * - * @method addError - */ - addError ( - key: string, - error: IErr | ValidationErr - ): IErr | ValidationErr { - // Construct new `Err` instance. - let newError; - if (isObject(error) && !Array.isArray(error)) { - assert('Error must have value.', error.hasOwnProperty('value')); - assert('Error must have validation.', error.hasOwnProperty('validation')); - newError = new Err((>error).value, (>error).validation); - } else { - newError = new Err(this.key, (error)); - } + if (!Boolean(key)) { + let maybePromise = keys(this.validationMap as object).map(validationKey => { + return this._validateKey(validationKey, this._valueFor(validationKey)); + }); - // Add `key` to errors map. - let errors: Errors = this[ERRORS]; - setNestedProperty(errors, key, newError); - this.notifyPropertyChange(ERRORS); + return Promise.all(maybePromise); + } - // Notify that `key` has changed. - this.notifyPropertyChange(key); + return Promise.resolve(this._validateKey(key, this._valueFor(key))); + } - // Return passed-in `error`. - return error; + /** + * Manually add an error to the changeset. If there is an existing + * error or change for `key`, it will be overwritten. + * + * @method addError + */ + addError ( + key: string, + error: IErr | ValidationErr + ): IErr | ValidationErr { + // Construct new `Err` instance. + let newError; + if (isObject(error) && !Array.isArray(error)) { + assert('Error must have value.', error.hasOwnProperty('value')); + assert('Error must have validation.', error.hasOwnProperty('validation')); + newError = new Err((>error).value, (>error).validation); + } else { + newError = new Err(this.key, (error)); } - /** - * Manually push multiple errors to the changeset as an array. - * - * @method pushErrors - */ - pushErrors( - key: keyof ChangesetDef, - ...newErrors: string[] | ValidationErr[] - ) { - let errors: Errors = this[ERRORS]; - let existingError: IErr | Err = errors[key] || new Err(null, []); - let validation: ValidationErr | ValidationErr[] = existingError.validation; - let value: any = this[key] - - if (!Array.isArray(validation) && Boolean(validation)) { - existingError.validation = [validation]; - } + // Add `key` to errors map. + let errors: Errors = this[ERRORS]; + setNestedProperty(errors, key, newError); + this.notifyPropertyChange(ERRORS); + + // Notify that `key` has changed. + this.notifyPropertyChange(key); - let v = existingError.validation; - validation = [...v, ...newErrors]; - let newError = new Err(value, validation); - setNestedProperty(errors, (key), newError); + // Return passed-in `error`. + return error; + } - this.notifyPropertyChange(ERRORS); - this.notifyPropertyChange((key)); + /** + * Manually push multiple errors to the changeset as an array. + * + * @method pushErrors + */ + pushErrors( + key: keyof ChangesetDef, + ...newErrors: string[] | ValidationErr[] + ) { + let errors: Errors = this[ERRORS]; + let existingError: IErr | Err = errors[key] || new Err(null, []); + let validation: ValidationErr | ValidationErr[] = existingError.validation; + let value: any = this[key] - return { value, validation }; + if (!Array.isArray(validation) && Boolean(validation)) { + existingError.validation = [validation]; } - /** - * Creates a snapshot of the changeset's errors and changes. - * - * @method snapshot - */ - snapshot(): Snapshot { - let changes: Changes = this[CHANGES]; - let errors: Errors = this[ERRORS]; - - return { - changes: keys(changes).reduce((newObj: Changes, key: keyof Changes) => { - newObj[key] = changes[key].value; - return newObj; - }, {}), - - errors: keys(errors).reduce((newObj: Errors, key: keyof Errors) => { - let e = errors[key] - newObj[key] = { value: e.value, validation: e.validation }; - return newObj; - }, {}), - }; - } + let v = existingError.validation; + validation = [...v, ...newErrors]; + let newError = new Err(value, validation); + setNestedProperty(errors, (key), newError); - /** - * Restores a snapshot of changes and errors. This overrides existing - * changes and errors. - * - * @method restore - */ - restore({ changes, errors }: Snapshot): Buffered { - validateNestedObj('snapshot.changes', changes); - validateNestedObj('snapshot.errors', errors); - - let newChanges: Changes = keys(changes).reduce((newObj: Changes, key: keyof Changes) => { - newObj[key] = new Change(changes[key]); + this.notifyPropertyChange(ERRORS); + this.notifyPropertyChange((key)); + + return { value, validation }; + } + + /** + * Creates a snapshot of the changeset's errors and changes. + * + * @method snapshot + */ + snapshot(): Snapshot { + let changes: Changes = this[CHANGES]; + let errors: Errors = this[ERRORS]; + + return { + changes: keys(changes).reduce((newObj: Changes, key: keyof Changes) => { + newObj[key] = changes[key].value; return newObj; - }, {}); + }, {}), - let newErrors: Errors = keys(errors).reduce((newObj: Errors, key: keyof Changes) => { - let e: IErr = errors[key]; - newObj[key] = new Err(e.value, e.validation); + errors: keys(errors).reduce((newObj: Errors, key: keyof Errors) => { + let e = errors[key] + newObj[key] = { value: e.value, validation: e.validation }; return newObj; - }, {}); + }, {}), + }; + } - this[CHANGES] = newChanges; - this[ERRORS] = newErrors; + /** + * Restores a snapshot of changes and errors. This overrides existing + * changes and errors. + * + * @method restore + */ + restore({ changes, errors }: Snapshot): ChangesetDef { + validateNestedObj('snapshot.changes', changes); + validateNestedObj('snapshot.errors', errors); + + let newChanges: Changes = keys(changes).reduce((newObj: Changes, key: keyof Changes) => { + newObj[key] = new Change(changes[key]); + return newObj; + }, {}); + + let newErrors: Errors = keys(errors).reduce((newObj: Errors, key: keyof Changes) => { + let e: IErr = errors[key]; + newObj[key] = new Err(e.value, e.validation); + return newObj; + }, {}); + + this[CHANGES] = newChanges; + this[ERRORS] = newErrors; + + this._notifyVirtualProperties(); + return this; + } - this._notifyVirtualProperties(); + /** + * Unlike `Ecto.Changeset.cast`, `cast` will take allowed keys and + * remove unwanted keys off of the changeset. For example, this method + * can be used to only allow specified changes through prior to saving. + * + * @method cast + */ + cast(allowed: string[] = []): ChangesetDef { + let changes: Changes = this[CHANGES]; + + if (Array.isArray(allowed) && allowed.length === 0) { return this; } - /** - * Unlike `Ecto.Changeset.cast`, `cast` will take allowed keys and - * remove unwanted keys off of the changeset. For example, this method - * can be used to only allow specified changes through prior to saving. - * - * @method cast - */ - cast(allowed: string[] = []): Buffered { - let changes: Changes = this[CHANGES]; - - if (Array.isArray(allowed) && allowed.length === 0) { - return this; - } + let changeKeys: string[] = keys(changes); + let validKeys = changeKeys.filter((key: string) => allowed.includes(key)); + let casted = take(changes, validKeys); + this[CHANGES] = casted; + return this; + } - let changeKeys: string[] = keys(changes); - let validKeys = changeKeys.filter((key: string) => allowed.includes(key)); - let casted = take(changes, validKeys); - this[CHANGES] = casted; - return this; + /** + * Checks to see if async validator for a given key has not resolved. + * If no key is provided it will check to see if any async validator is running. + * + * @method isValidating + */ + isValidating(key: string | void): boolean { + let runningValidations: RunningValidations = this[RUNNING_VALIDATIONS]; + let ks: string[] = keys(runningValidations); + if (key) { + return ks.includes(key); } + return ks.length > 0; + } - /** - * Checks to see if async validator for a given key has not resolved. - * If no key is provided it will check to see if any async validator is running. - * - * @method isValidating - */ - isValidating(key: string | void): boolean { - let runningValidations: RunningValidations = this[RUNNING_VALIDATIONS]; - let ks: string[] = keys(runningValidations); - if (key) { - return ks.includes(key); - } - return ks.length > 0; + /** + * Validates a specific key + * + * @method _validateKey + * @private + */ + _validateKey ( + key: string, + value: T + ): Promise> | T | IErr | ValidationResult { + let content: Content = this[CONTENT]; + let oldValue: any = content[key]; + let validation: ValidationResult | Promise = + this._validate(key, value, oldValue); + + this.trigger(BEFORE_VALIDATION_EVENT, key); + + // TODO: Address case when Promise is rejected. + if (isPromise(validation)) { + this._setIsValidating(key, true); + + return (>validation).then((resolvedValidation: ValidationResult) => { + this._setIsValidating(key, false); + this.trigger(AFTER_VALIDATION_EVENT, key); + + return this._handleValidation(resolvedValidation, { key, value }); + }); } - /** - * Validates a specific key - * - * @method _validateKey - * @private - */ - _validateKey ( - key: string, - value: T - ): Promise> | T | IErr | ValidationResult { - let content: Content = this[CONTENT]; - let oldValue: any = content[key]; - let validation: ValidationResult | Promise = - this._validate(key, value, oldValue); - - this.trigger(BEFORE_VALIDATION_EVENT, key); - - // TODO: Address case when Promise is rejected. - if (isPromise(validation)) { - this._setIsValidating(key, true); - - return (>validation).then((resolvedValidation: ValidationResult) => { - this._setIsValidating(key, false); - this.trigger(AFTER_VALIDATION_EVENT, key); + let result = this._handleValidation(validation, { key, value }); - return this._handleValidation(resolvedValidation, { key, value }); - }); - } - - let result = this._handleValidation(validation, { key, value }); + this.trigger(AFTER_VALIDATION_EVENT, key); - this.trigger(AFTER_VALIDATION_EVENT, key); + return result; + } - return result; + /** + * Takes resolved validation and adds an error or simply returns the value + * + * @method _handleValidation + * @private + */ + _handleValidation ( + validation: ValidationResult, + { key, value }: NewProperty + ): T | IErr | ValidationErr { + + let isValid: boolean = validation === true + || Array.isArray(validation) + && validation.length === 1 + && validation[0] === true; + + // Happy path: remove `key` from error map. + this._deleteKey(ERRORS, key); + + // Error case. + if (!isValid) { + return this.addError(key, { value, validation } as IErr); } - /** - * Takes resolved validation and adds an error or simply returns the value - * - * @method _handleValidation - * @private - */ - _handleValidation ( - validation: ValidationResult, - { key, value }: NewProperty - ): T | IErr | ValidationErr { - - let isValid: boolean = validation === true - || Array.isArray(validation) - && validation.length === 1 - && validation[0] === true; - - // Happy path: remove `key` from error map. - this._deleteKey(ERRORS, key); + return value; + } - // Error case. - if (!isValid) { - return this.addError(key, { value, validation } as IErr); - } + /** + * runs the validator with the key and value + * + * @method _validate + * @private + */ + _validate( + key: string, + newValue: unknown, + oldValue: unknown + ): ValidationResult | Promise { + let validator: ValidatorAction = this[VALIDATOR]; + let content: Content = this[CONTENT]; + + if (typeof validator === 'function') { + let isValid = validator({ + key, + newValue, + oldValue, + changes: get(this, 'change'), + content, + }); - return value; + return typeof isValid === 'boolean' || Boolean(isValid) ? isValid : true; } - /** - * runs the validator with the key and value - * - * @method _validate - * @private - */ - _validate( - key: string, - newValue: unknown, - oldValue: unknown - ): ValidationResult | Promise { - let validator: ValidatorAction = this[VALIDATOR]; - let content: Content = this[CONTENT]; - - if (typeof validator === 'function') { - let isValid = validator({ - key, - newValue, - oldValue, - changes: get(this, 'change'), - content, - }); - - return typeof isValid === 'boolean' || Boolean(isValid) ? isValid : true; - } + return true; + } - return true; + /** + * Sets property or error on the changeset. + * Returns value or error + */ + _setProperty ( + { key, value, oldValue }: NewProperty + ): void { + let changes: Changes = this[CHANGES]; + + // Happy path: update change map. + if (!isEqual(oldValue, value)) { + setNestedProperty(changes, key, new Change(value)); + } else if (key in changes) { + this._deleteKey(CHANGES, key); } - /** - * Sets property or error on the changeset. - * Returns value or error - */ - _setProperty ( - { key, value, oldValue }: NewProperty - ): void { - let changes: Changes = this[CHANGES]; - - // Happy path: update change map. - if (!isEqual(oldValue, value)) { - setNestedProperty(changes, key, new Change(value)); - } else if (key in changes) { - this._deleteKey(CHANGES, key); - } + // Happy path: notify that `key` was added. + this.notifyPropertyChange(CHANGES); + this.notifyPropertyChange(key); + } - // Happy path: notify that `key` was added. - this.notifyPropertyChange(CHANGES); - this.notifyPropertyChange(key); + /** + * Increment or decrement the number of running validations for a + * given key. + */ + _setIsValidating( + key: string, + value: boolean + ): void { + let running: RunningValidations = this[RUNNING_VALIDATIONS]; + let count: number = running[key] || 0; + + if (!value && count === 1) { + delete running[key]; + return; } - /** - * Increment or decrement the number of running validations for a - * given key. - */ - _setIsValidating( - key: string, - value: boolean - ): void { - let running: RunningValidations = this[RUNNING_VALIDATIONS]; - let count: number = running[key] || 0; - - if (!value && count === 1) { - delete running[key]; - return; - } + deepSet(running, key, value ? count+1 : count-1); + } - deepSet(running, key, value ? count+1 : count-1); + /** + * Value for change or the original value. + */ + _valueFor( + key: string + ): any { + let changes: Changes = this[CHANGES]; + let errors: Errors = this[ERRORS]; + let content: Content = this[CONTENT]; + + if (errors.hasOwnProperty(key)) { + let e: Err = errors[key]; + return e.value; } - /** - * Value for change or the original value. - */ - _valueFor( - key: string - ): any { - let changes: Changes = this[CHANGES]; - let errors: Errors = this[ERRORS]; - let content: Content = this[CONTENT]; - - if (errors.hasOwnProperty(key)) { - let e: Err = errors[key]; - return e.value; - } - - let original: any = content[key]; + let original: any = content[key]; - if (changes.hasOwnProperty(key)) { - let c: Change = changes[key]; - return c.value; - } + if (changes.hasOwnProperty(key)) { + let c: Change = changes[key]; + return c.value; + } - // nested thus circulate through `value` and see if match - if (key.indexOf('.') !== -1) { - let [baseKey, ...keyParts] = key.split('.'); - if (changes.hasOwnProperty(baseKey)) { - let { value } = changes[baseKey]; - // make sure to return value if not object - if(!value) { - return value; - } - let result = value[keyParts.join('.')]; - return result; + // nested thus circulate through `value` and see if match + if (key.indexOf('.') !== -1) { + let [baseKey, ...keyParts] = key.split('.'); + if (changes.hasOwnProperty(baseKey)) { + let { value } = changes[baseKey]; + // make sure to return value if not object + if(!value) { + return value; } + let result = value[keyParts.join('.')]; + return result; } + } - return original; + return original; + } + + /** + * Notifies virtual properties set on the changeset of a change. + * You can specify which keys are notified by passing in an array. + * + * @private + * @param {Array} keys + * @return {Void} + */ + _notifyVirtualProperties( + keys?: string[] + ): void { + if (!keys) { + keys = this._rollbackKeys() } + (keys || []).forEach(key => this.notifyPropertyChange(key)); + } - /** - * Notifies virtual properties set on the changeset of a change. - * You can specify which keys are notified by passing in an array. - * - * @private - * @param {Array} keys - * @return {Void} - */ - _notifyVirtualProperties( - keys?: string[] - ): void { - if (!keys) { - keys = this._rollbackKeys() - } - (keys || []).forEach(key => this.notifyPropertyChange(key)); + /** + * Gets the changes and error keys. + */ + _rollbackKeys(): string[] { + let changes: Changes = this[CHANGES]; + let errors: Errors = this[ERRORS]; + return [...new Set([...keys(changes), ...keys(errors)])]; + } + + /** + * Deletes a key off an object and notifies observers. + */ + _deleteKey( + objName: string, + key = '' + ): void { + let obj = this[objName] as InternalMap; + if (obj.hasOwnProperty(key)) { + delete obj[key]; } + // let c: Buffered = this; + this.notifyPropertyChange(`${objName}.${key}`); + this.notifyPropertyChange(objName); + } - /** - * Gets the changes and error keys. - */ - _rollbackKeys(): string[] { + getProperty(key: string): any { + if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { let changes: Changes = this[CHANGES]; - let errors: Errors = this[ERRORS]; - return [...new Set([...keys(changes), ...keys(errors)])]; + return changes[key]; } - /** - * Deletes a key off an object and notifies observers. - */ - _deleteKey( - objName: string, - key = '' - ): void { - let obj = this[objName] as InternalMap; - if (obj.hasOwnProperty(key)) { - delete obj[key]; - } - // let c: Buffered = this; - this.notifyPropertyChange(`${objName}.${key}`); - this.notifyPropertyChange(objName); + // return getters/setters/methods on BufferedProxy instance + if (this[key]) { + return this[key]; } - getProperty(key: string): any { - if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { - let changes: Changes = this[CHANGES]; - return changes[key]; - } - - // return getters/setters/methods on BufferedProxy instance - if (this[key]) { - return this[key]; - } + let content: Content = this[CONTENT]; + return content[key]; + } - let content: Content = this[CONTENT]; - return content[key]; + setProperty ( + key: string, + value: T + ): void | Promise> | T | IErr | ValidationResult { + if (this.hasOwnProperty(key)) { + this[key] = value; } - set ( - key: string, - value: T - ): void | Promise> | T | IErr | ValidationResult { - if (this.hasOwnProperty(key)) { - this[key] = value; - } - - return this.setUnknownProperty(key, value); - } + return this.setUnknownProperty(key, value); } +} + +/** + * Creates new changesets. + */ +export function changeset( + obj: object, + validateFn: ValidatorAction = defaultValidatorFn, + validationMap: ValidatorMap = {}, + options: Config = {} +): IChangeset { + assert('Underlying object for changeset is missing', Boolean(obj)); - return Buffered.create(); + return Buffered.create(obj, validateFn, validationMap, options); } export default class Changeset { @@ -781,7 +798,7 @@ export default class Changeset { validationMap: ValidatorMap = {}, options: Config = {} ) { - const c = changeset(obj, validateFn, validationMap, options); + const c: IChangeset = changeset(obj, validateFn, validationMap, options); return new Proxy(c, { get(targetBuffer, key/*, receiver*/) { @@ -790,7 +807,7 @@ export default class Changeset { }, set(targetBuffer, key, value/*, receiver*/) { - targetBuffer.set(key.toString(), value); + targetBuffer.setProperty(key.toString(), value); return true; } }); diff --git a/addon/types/evented.ts b/addon/types/evented.ts new file mode 100644 index 00000000..7b0631f0 --- /dev/null +++ b/addon/types/evented.ts @@ -0,0 +1,13 @@ +export interface INotifier { + listeners: Function[], + addListener(callback: Function): Function, + removeListener(callback: Function): void, + trigger(...args: any[]): void, +} + +export default interface IEvented { + on(eventName: string, callback: Function): INotifier, + off(eventName: string, callback: Function): INotifier, + trigger(eventName: string, ...args: any[]): void, + _eventedNotifiers: { [key: string]: any } +} diff --git a/addon/types/index.ts b/addon/types/index.ts index f7dcfb9f..fb4c5858 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -1,9 +1,12 @@ +import EmberObject from '@ember/object'; +import IEvented, { INotifier } from 'ember-changeset/types/evented'; import { ValidationErr, ValidationResult, } from 'ember-changeset/types/validation-result'; import { ValidatorAction, ValidatorMapFunc, ValidatorMap } from 'ember-changeset/types/validator-action'; +export { IEvented, INotifier }; export { ValidatorAction, ValidatorMapFunc, ValidatorMap }; export { ValidationErr, ValidationResult }; import { Config } from 'ember-changeset/types/config'; @@ -63,12 +66,8 @@ export type Inflated = { export type PrepareChangesFn = (obj: ({ [s: string]: any })) => ({ [s: string]: any }) -interface Any { - [s: string]: any -} - -export interface ChangesetDef extends Any { - __changeset__: '__CHANGESET__', +export interface ChangesetDef { + __changeset__: string, _content: object, _changes: Changes, @@ -80,14 +79,14 @@ export interface ChangesetDef extends Any { changes: ComputedProperty, errors: ComputedProperty, - change: Inflated, - error: Inflated>, + error: ComputedProperty, + change: ComputedProperty, data: object, - isValid: ComputedProperty, - isPristine: ComputedProperty, - isInvalid: ComputedProperty, - isDirty: ComputedProperty, + isValid: ComputedProperty, + isPristine: ComputedProperty, + isInvalid: ComputedProperty, + isDirty: ComputedProperty, // _super: (...args: Array) => void, // notifyPropertyChange: (s: string) => void, @@ -95,10 +94,9 @@ export interface ChangesetDef extends Any { // init: () => void, // unknownProperty: (s: string) => any, // setUnknownProperty: (key: string, value: T) => (T | IErr | Promise | Promise> | ValidationResult), - get: (key: string) => any, - set: (key: string, value: T) => (void | T | IErr | Promise | Promise> | ValidationResult), - toString: () => string, - prepare: PrepareChangesFn, + getProperty: (key: string) => any, + setProperty: (key: string, value: T) => (void | T | IErr | Promise | Promise> | ValidationResult), + prepare(preparedChangedFn: PrepareChangesFn): ChangesetDef, execute: () => ChangesetDef, save: (options: object) => Promise, merge: (changeset: ChangesetDef) => ChangesetDef, @@ -120,3 +118,5 @@ export interface ChangesetDef extends Any { _rollbackKeys: () => Array, _deleteKey: (objName: InternalMapKey, key: string) => void }; + +export interface IChangeset extends EmberObject, ChangesetDef, IEvented {} diff --git a/addon/types/validator-action.ts b/addon/types/validator-action.ts index fd5c8a8e..dd92bb4d 100644 --- a/addon/types/validator-action.ts +++ b/addon/types/validator-action.ts @@ -5,7 +5,7 @@ export type ValidatorAction = { key: string, newValue: unknown, oldValue: unknown, - changes: { [key: string]: unknown }, + changes: unknown, content: object }): ValidationResult | Promise; } @@ -15,7 +15,7 @@ export type ValidatorMapFunc = { key: string, newValue: unknown, oldValue: unknown, - changes: { [key: string]: unknown }, + changes: unknown, content: object ): ValidationResult | Promise; } diff --git a/addon/utils/computed/inflate.ts b/addon/utils/computed/inflate.ts index 1a11c40c..d13cc871 100644 --- a/addon/utils/computed/inflate.ts +++ b/addon/utils/computed/inflate.ts @@ -14,7 +14,7 @@ const { keys } = Object; export default function inflate( dependentKey: string, transform: (arg: T) => any = a => a -): ComputedProperty<{}, {}> { +): ComputedProperty { return computed(dependentKey, function() { let obj: { [key: string]: any } = get(this, dependentKey); diff --git a/addon/utils/computed/is-empty-object.ts b/addon/utils/computed/is-empty-object.ts index 8e4ac0e2..fd8b2233 100644 --- a/addon/utils/computed/is-empty-object.ts +++ b/addon/utils/computed/is-empty-object.ts @@ -7,7 +7,7 @@ const { keys } = Object; export default function isEmptyObject( dependentKey: string -): ComputedProperty<{}, {}> { +): ComputedProperty { assert('`dependentKey` must be defined', isPresent(dependentKey)); return computed(dependentKey, function() { From 51bbb8958d08cae3ccbe5998f254b185e8026db9 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Mon, 11 Nov 2019 13:37:06 -0800 Subject: [PATCH 05/75] add constructor --- addon/index.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/addon/index.ts b/addon/index.ts index eda42686..4ea8f0f6 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -59,6 +59,15 @@ const defaultValidatorFn = () => true; const defaultOptions = { skipValidate: false }; class Buffered extends EmberObject implements ChangesetDef, IEvented { + constructor(obj: object, validateFn: ValidatorAction, validationMap: ValidatorMap, options: Config) { + super(...arguments); + + this.obj = obj; + this.validateFn = validateFn; + this.validationMap = validationMap; + this.options = options; + } + /** * Any property that is not one of the getter/setter/methods on the * BufferedProxy instance. The value type is `unknown` in order to avoid @@ -782,7 +791,7 @@ export function changeset( ): IChangeset { assert('Underlying object for changeset is missing', Boolean(obj)); - return Buffered.create(obj, validateFn, validationMap, options); + return new Buffered(obj, validateFn, validationMap, options); } export default class Changeset { From ad682d28b9793805936f5cf7d886484423017162 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Mon, 11 Nov 2019 13:45:23 -0800 Subject: [PATCH 06/75] IChangesetDef types --- addon/index.ts | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/addon/index.ts b/addon/index.ts index 4ea8f0f6..bbe10a83 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -26,13 +26,11 @@ import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; import deepSet from 'ember-deep-set'; import { Changes, - ChangesetDef, Config, Content, Errors, IErr, IChangeset, - IEvented, INotifier, InternalMap, NewProperty, @@ -58,7 +56,7 @@ const AFTER_ROLLBACK_EVENT = 'afterRollback'; const defaultValidatorFn = () => true; const defaultOptions = { skipValidate: false }; -class Buffered extends EmberObject implements ChangesetDef, IEvented { +class Buffered extends EmberObject implements IChangeset { constructor(obj: object, validateFn: ValidatorAction, validationMap: ValidatorMap, options: Config) { super(...arguments); @@ -189,7 +187,7 @@ class Buffered extends EmberObject implements ChangesetDef, IEvented { */ prepare( prepareChangesFn: PrepareChangesFn - ): ChangesetDef { + ): IChangeset { let changes: { [s: string]: any } = this['_bareChanges']; let preparedChanges = prepareChangesFn(changes); @@ -211,7 +209,7 @@ class Buffered extends EmberObject implements ChangesetDef, IEvented { * * @method execute */ - execute(): ChangesetDef { + execute(): IChangeset { if (this.isValid && this.isDirty) { let content: Content = this[CONTENT]; let changes: Changes = this[CHANGES]; @@ -229,7 +227,7 @@ class Buffered extends EmberObject implements ChangesetDef, IEvented { */ save( options: object - ): Promise { + ): Promise { let content: Content = this[CONTENT]; let savePromise: any | Promise = Promise.resolve(this); this.execute(); @@ -272,8 +270,8 @@ class Buffered extends EmberObject implements ChangesetDef, IEvented { * @method merge */ merge( - changeset: ChangesetDef - ): ChangesetDef { + changeset: IChangeset + ): IChangeset { let content: Content = this[CONTENT]; assert('Cannot merge with a non-changeset', isChangeset(changeset)); assert('Cannot merge with a changeset of different content', changeset[CONTENT] === content); @@ -305,7 +303,7 @@ class Buffered extends EmberObject implements ChangesetDef, IEvented { * * @method rollback */ - rollback(): ChangesetDef { + rollback(): IChangeset { // Get keys before reset. let c: Buffered = this; let keys = c._rollbackKeys(); @@ -328,7 +326,7 @@ class Buffered extends EmberObject implements ChangesetDef, IEvented { * @param {String} key optional key to rollback invalid values * @return {Changeset} */ - rollbackInvalid(key: string | void): ChangesetDef { + rollbackInvalid(key: string | void): IChangeset { let errorKeys = keys(this[ERRORS]); if (key) { @@ -359,7 +357,7 @@ class Buffered extends EmberObject implements ChangesetDef, IEvented { * @param {String} key key to delete off of changes and errors * @return {Changeset} */ - rollbackProperty(key: string): ChangesetDef { + rollbackProperty(key: string): IChangeset { this._deleteKey(CHANGES, key); this._deleteKey(ERRORS, key); @@ -430,7 +428,7 @@ class Buffered extends EmberObject implements ChangesetDef, IEvented { * @method pushErrors */ pushErrors( - key: keyof ChangesetDef, + key: keyof IChangeset, ...newErrors: string[] | ValidationErr[] ) { let errors: Errors = this[ERRORS]; @@ -482,7 +480,7 @@ class Buffered extends EmberObject implements ChangesetDef, IEvented { * * @method restore */ - restore({ changes, errors }: Snapshot): ChangesetDef { + restore({ changes, errors }: Snapshot): IChangeset { validateNestedObj('snapshot.changes', changes); validateNestedObj('snapshot.errors', errors); @@ -511,7 +509,7 @@ class Buffered extends EmberObject implements ChangesetDef, IEvented { * * @method cast */ - cast(allowed: string[] = []): ChangesetDef { + cast(allowed: string[] = []): IChangeset { let changes: Changes = this[CHANGES]; if (Array.isArray(allowed) && allowed.length === 0) { From 9e2f4fa2f96566956d04c73e8f745f98106c3172 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Mon, 11 Nov 2019 21:35:58 -0800 Subject: [PATCH 07/75] start separating out files --- addon/-private/validated-changeset.ts | 818 ++++++++++++++++++++++++++ addon/index.ts | 729 ++--------------------- addon/types/index.ts | 2 +- tsconfig.json | 3 +- 4 files changed, 855 insertions(+), 697 deletions(-) create mode 100644 addon/-private/validated-changeset.ts diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts new file mode 100644 index 00000000..5aadad9d --- /dev/null +++ b/addon/-private/validated-changeset.ts @@ -0,0 +1,818 @@ +import { assert } from '@ember/debug'; +import { get } from '@ember/object'; +import { + not, + readOnly, +} from '@ember/object/computed'; +import { + isEqual +} from '@ember/utils'; +import Change from 'ember-changeset/-private/change'; +import { notifierForEvent } from 'ember-changeset/-private/evented'; +import Err from 'ember-changeset/-private/err'; +import pureAssign from 'ember-changeset/utils/assign'; +import inflate from 'ember-changeset/utils/computed/inflate'; +import isEmptyObject from 'ember-changeset/utils/computed/is-empty-object'; +import objectToArray from 'ember-changeset/utils/computed/object-to-array'; +import transform from 'ember-changeset/utils/computed/transform'; +import isChangeset, { CHANGESET } from 'ember-changeset/utils/is-changeset'; +import isObject from 'ember-changeset/utils/is-object'; +import isPromise from 'ember-changeset/utils/is-promise'; +import mergeNested from 'ember-changeset/utils/merge-nested'; +import objectWithout from 'ember-changeset/utils/object-without'; +import setNestedProperty from 'ember-changeset/utils/set-nested-property'; +import take from 'ember-changeset/utils/take'; +import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; +import deepSet from 'ember-deep-set'; +import { + Changes, + Config, + Content, + Errors, + IErr, + IChangeset, + INotifier, + InternalMap, + NewProperty, + PrepareChangesFn, + RunningValidations, + Snapshot, + ValidationErr, + ValidationResult, + ValidatorAction, + ValidatorMap +} from 'ember-changeset/types'; + +const { keys } = Object; +const CONTENT = '_content'; +const CHANGES = '_changes'; +const ERRORS = '_errors'; +const VALIDATOR = '_validator'; +const OPTIONS = '_options'; +const RUNNING_VALIDATIONS = '_runningValidations'; +const BEFORE_VALIDATION_EVENT = 'beforeValidation'; +const AFTER_VALIDATION_EVENT = 'afterValidation'; +const AFTER_ROLLBACK_EVENT = 'afterRollback'; +const defaultValidatorFn = () => true; +const defaultOptions = { skipValidate: false }; + +export class BufferedChangeset implements IChangeset { + constructor(obj: object, validateFn: ValidatorAction, validationMap: ValidatorMap, options: Config) { + this.obj = obj; + this.validateFn = validateFn; + this.validationMap = validationMap; + this.options = options; + + this.CONTENT = this.obj; + this.CHANGES = {}; + this.ERRORS = {}; + this.VALIDATOR = this.validateFn; + this.OPTIONS = pureAssign(defaultOptions, this.options as object); + this.RUNNING_VALIDATIONS = {}; + } + + /** + * Any property that is not one of the getter/setter/methods on the + * BufferedProxy instance. The value type is `unknown` in order to avoid + * having to predefine key/value pairs of the correct types in the target + * object. Setting the index signature to `[key: string]: T[K]` would allow us + * to typecheck the value that is set on the proxy. However, no + * getters/setters/methods can be added to the class. This is the tradeoff + * we make for this particular design pattern (class based BufferedProxy). + */ + [key: string]: unknown; + + __changeset__ = CHANGESET; + + _eventedNotifiers = {}; + _content = {}; + _changes = {}; + _errors = {}; + _validator = defaultValidatorFn; + _options = defaultOptions; + _runningValidations = {}; + _bareChanges = transform(CHANGES, (c: Change) => c.value); + + on(eventName: string, callback: Function): INotifier { + const notifier = notifierForEvent(this, eventName); + return notifier.addListener(callback); + } + + off(eventName: string, callback: Function): INotifier { + const notifier = notifierForEvent(this, eventName); + return notifier.removeListener(callback); + } + + trigger(eventName: string, ...args: any[]): void { + const notifier = notifierForEvent(this, eventName); + if (notifier) { + notifier.trigger.apply(notifier, args); + } + } + + changes = objectToArray(CHANGES, (c: Change) => c.value, false); + errors = objectToArray(ERRORS, (e: Err) => ({ value: e.value, validation: e.validation }), true); + change = inflate(CHANGES, (c: Change) => c.value); + error = inflate(ERRORS, (e: IErr) => ({ value: e.value, validation: e.validation })); + data = readOnly(CONTENT); + + isValid = isEmptyObject(ERRORS); + isPristine = isEmptyObject(CHANGES); + isInvalid = not('isValid').readOnly(); + isDirty = not('isPristine').readOnly(); + + /** + * Proxies `get` to the underlying content or changed value, if present. + */ + unknownProperty( + key: string + ): any { + return this._valueFor(key); + } + + /** + * Stores change on the changeset. + * + * @method setUnknownProperty + */ + setUnknownProperty ( + key: string, + value: T + ): void { + let config: Config = this[OPTIONS]; + let skipValidate: boolean | undefined = config['skipValidate']; + + if (skipValidate) { + let content: Content = this[CONTENT]; + let oldValue = content[key]; + this._setProperty({ key, value, oldValue }); + this._handleValidation(true, { key, value }); + } + + let content: Content = this[CONTENT]; + let oldValue: any = content[key]; + this._setProperty({ key, value, oldValue }); + this._validateKey(key, value); + } + + /** + * String representation for the changeset. + */ + toString(): string { + let normalisedContent: object = pureAssign(this[CONTENT], {}); + return `changeset:${normalisedContent.toString()}`; + } + + /** + * Provides a function to run before emitting changes to the model. The + * callback function must return a hash in the same shape: + * + * ``` + * changeset + * .prepare((changes) => { + * let modified = {}; + * + * for (let key in changes) { + * modified[underscore(key)] = changes[key]; + * } + * + * return modified; // { first_name: "Jim", last_name: "Bob" } + * }) + * .execute(); // execute the changes + * ``` + * + * @method prepare + */ + prepare( + prepareChangesFn: PrepareChangesFn + ): IChangeset { + let changes: { [s: string]: any } = this['_bareChanges']; + let preparedChanges = prepareChangesFn(changes); + + assert('Callback to `changeset.prepare` must return an object', isObject(preparedChanges)); + validateNestedObj('preparedChanges', preparedChanges); + + let newObj: Changes = {}; + let newChanges: Changes = keys(preparedChanges).reduce((newObj: Changes, key: keyof Changes) => { + newObj[key] = new Change(preparedChanges[key]); + return newObj; + }, newObj); + + this[CHANGES] = newChanges; + return this; + } + + /** + * Executes the changeset if in a valid state. + * + * @method execute + */ + execute(): IChangeset { + if (this.isValid && this.isDirty) { + let content: Content = this[CONTENT]; + let changes: Changes = this[CHANGES]; + keys(changes).forEach(key => deepSet(content, key, changes[key].value)); + } + + return this; + } + + /** + * Executes the changeset and saves the underlying content. + * + * @method save + * @param {Object} options optional object to pass to content save method + */ + save( + options: object + ): Promise { + let content: Content = this[CONTENT]; + let savePromise: any | Promise = Promise.resolve(this); + this.execute(); + + if (typeof content.save === 'function') { + savePromise = content.save(options); + } else if (typeof content.save === 'function') { + // we might be getting this off a proxy object. For example, when a + // belongsTo relationship (a proxy on the parent model) + // another way would be content(belongsTo).content.save + let saveFunc: Function = content.save; + if (saveFunc) { + savePromise = saveFunc(options); + } + } + + return Promise.resolve(savePromise).then((result) => { + this.rollback(); + return result; + }); + } + + /** + * Merges 2 valid changesets and returns a new changeset. Both changesets + * must point to the same underlying object. The changeset target is the + * origin. For example: + * + * ``` + * let changesetA = new Changeset(user, validatorFn); + * let changesetB = new Changeset(user, validatorFn); + * changesetA.set('firstName', 'Jim'); + * changesetB.set('firstName', 'Jimmy'); + * changesetB.set('lastName', 'Fallon'); + * let changesetC = changesetA.merge(changesetB); + * changesetC.execute(); + * user.get('firstName'); // "Jimmy" + * user.get('lastName'); // "Fallon" + * ``` + * + * @method merge + */ + merge( + changeset: IChangeset + ): IChangeset { + let content: Content = this[CONTENT]; + assert('Cannot merge with a non-changeset', isChangeset(changeset)); + assert('Cannot merge with a changeset of different content', changeset[CONTENT] === content); + + if (this.isPristine && changeset.isPristine) { + return this; + } + + let c1: Changes = this[CHANGES]; + let c2: Changes = changeset[CHANGES]; + let e1: Errors = this[ERRORS]; + let e2: Errors = changeset[ERRORS]; + + let newChangeset: any = new ValidatedChangeset(content, this[VALIDATOR]); // ChangesetDef + let newErrors: Errors = objectWithout(keys(c2), e1); + let newChanges: Changes = objectWithout(keys(e2), c1); + let mergedErrors: Errors = mergeNested(newErrors, e2); + let mergedChanges: Changes = mergeNested(newChanges, c2); + + newChangeset[ERRORS] = mergedErrors; + newChangeset[CHANGES] = mergedChanges; + newChangeset._notifyVirtualProperties(); + return newChangeset; + } + + /** + * Returns the changeset to its pristine state, and discards changes and + * errors. + * + * @method rollback + */ + rollback(): IChangeset { + // Get keys before reset. + let c: BufferedChangeset = this; + let keys = c._rollbackKeys(); + + // Reset. + this[CHANGES] = {}; + this[ERRORS] = {}; + c._notifyVirtualProperties(keys) + + c.trigger(AFTER_ROLLBACK_EVENT); + return this; + } + + /** + * Discards any errors, keeping only valid changes. + * + * @public + * @chainable + * @method rollbackInvalid + * @param {String} key optional key to rollback invalid values + * @return {Changeset} + */ + rollbackInvalid(key: string | void): IChangeset { + let errorKeys = keys(this[ERRORS]); + + if (key) { + this._notifyVirtualProperties([key]); + this._deleteKey(ERRORS, key); + if (errorKeys.indexOf(key) > -1) { + this._deleteKey(CHANGES, key); + } + } else { + this._notifyVirtualProperties(); + this[ERRORS] = {}; + + // if on CHANGES hash, rollback those as well + errorKeys.forEach((errKey) => { + this._deleteKey(CHANGES, errKey); + }) + } + + return this; + } + + /** + * Discards changes/errors for the specified properly only. + * + * @public + * @chainable + * @method rollbackProperty + * @param {String} key key to delete off of changes and errors + * @return {Changeset} + */ + rollbackProperty(key: string): IChangeset { + this._deleteKey(CHANGES, key); + this._deleteKey(ERRORS, key); + + return this; + } + + /** + * Validates the changeset immediately against the validationMap passed in. + * If no key is passed into this method, it will validate all fields on the + * validationMap and set errors accordingly. Will throw an error if no + * validationMap is present. + * + * @method validate + */ + validate( + key?: string | undefined + ): Promise | Promise> | Promise>> { + if (keys(this.validationMap as object).length === 0) { + return Promise.resolve(null); + } + + if (!Boolean(key)) { + let maybePromise = keys(this.validationMap as object).map(validationKey => { + return this._validateKey(validationKey, this._valueFor(validationKey)); + }); + + return Promise.all(maybePromise); + } + + return Promise.resolve(this._validateKey(key, this._valueFor(key))); + } + + /** + * Manually add an error to the changeset. If there is an existing + * error or change for `key`, it will be overwritten. + * + * @method addError + */ + addError ( + key: string, + error: IErr | ValidationErr + ): IErr | ValidationErr { + // Construct new `Err` instance. + let newError; + if (isObject(error) && !Array.isArray(error)) { + assert('Error must have value.', error.hasOwnProperty('value')); + assert('Error must have validation.', error.hasOwnProperty('validation')); + newError = new Err((>error).value, (>error).validation); + } else { + newError = new Err(this.key, (error)); + } + + // Add `key` to errors map. + let errors: Errors = this[ERRORS]; + setNestedProperty(errors, key, newError); + // this.notifyPropertyChange(ERRORS); + + // Notify that `key` has changed. + // this.notifyPropertyChange(key); + + // Return passed-in `error`. + return error; + } + + /** + * Manually push multiple errors to the changeset as an array. + * + * @method pushErrors + */ + pushErrors( + key: keyof IChangeset, + ...newErrors: string[] | ValidationErr[] + ) { + let errors: Errors = this[ERRORS]; + let existingError: IErr | Err = errors[key] || new Err(null, []); + let validation: ValidationErr | ValidationErr[] = existingError.validation; + let value: any = this[key] + + if (!Array.isArray(validation) && Boolean(validation)) { + existingError.validation = [validation]; + } + + let v = existingError.validation; + validation = [...v, ...newErrors]; + let newError = new Err(value, validation); + setNestedProperty(errors, (key), newError); + + // this.notifyPropertyChange(ERRORS); + // this.notifyPropertyChange((key)); + + return { value, validation }; + } + + /** + * Creates a snapshot of the changeset's errors and changes. + * + * @method snapshot + */ + snapshot(): Snapshot { + let changes: Changes = this[CHANGES]; + let errors: Errors = this[ERRORS]; + + return { + changes: keys(changes).reduce((newObj: Changes, key: keyof Changes) => { + newObj[key] = changes[key].value; + return newObj; + }, {}), + + errors: keys(errors).reduce((newObj: Errors, key: keyof Errors) => { + let e = errors[key] + newObj[key] = { value: e.value, validation: e.validation }; + return newObj; + }, {}), + }; + } + + /** + * Restores a snapshot of changes and errors. This overrides existing + * changes and errors. + * + * @method restore + */ + restore({ changes, errors }: Snapshot): IChangeset { + validateNestedObj('snapshot.changes', changes); + validateNestedObj('snapshot.errors', errors); + + let newChanges: Changes = keys(changes).reduce((newObj: Changes, key: keyof Changes) => { + newObj[key] = new Change(changes[key]); + return newObj; + }, {}); + + let newErrors: Errors = keys(errors).reduce((newObj: Errors, key: keyof Changes) => { + let e: IErr = errors[key]; + newObj[key] = new Err(e.value, e.validation); + return newObj; + }, {}); + + this[CHANGES] = newChanges; + this[ERRORS] = newErrors; + + this._notifyVirtualProperties(); + return this; + } + + /** + * Unlike `Ecto.Changeset.cast`, `cast` will take allowed keys and + * remove unwanted keys off of the changeset. For example, this method + * can be used to only allow specified changes through prior to saving. + * + * @method cast + */ + cast(allowed: string[] = []): IChangeset { + let changes: Changes = this[CHANGES]; + + if (Array.isArray(allowed) && allowed.length === 0) { + return this; + } + + let changeKeys: string[] = keys(changes); + let validKeys = changeKeys.filter((key: string) => allowed.includes(key)); + let casted = take(changes, validKeys); + this[CHANGES] = casted; + return this; + } + + /** + * Checks to see if async validator for a given key has not resolved. + * If no key is provided it will check to see if any async validator is running. + * + * @method isValidating + */ + isValidating(key: string | void): boolean { + let runningValidations: RunningValidations = this[RUNNING_VALIDATIONS]; + let ks: string[] = keys(runningValidations); + if (key) { + return ks.includes(key); + } + return ks.length > 0; + } + + /** + * Validates a specific key + * + * @method _validateKey + * @private + */ + _validateKey ( + key: string, + value: T + ): Promise> | T | IErr | ValidationResult { + let content: Content = this[CONTENT]; + let oldValue: any = content[key]; + let validation: ValidationResult | Promise = + this._validate(key, value, oldValue); + + this.trigger(BEFORE_VALIDATION_EVENT, key); + + // TODO: Address case when Promise is rejected. + if (isPromise(validation)) { + this._setIsValidating(key, true); + + return (>validation).then((resolvedValidation: ValidationResult) => { + this._setIsValidating(key, false); + this.trigger(AFTER_VALIDATION_EVENT, key); + + return this._handleValidation(resolvedValidation, { key, value }); + }); + } + + let result = this._handleValidation(validation, { key, value }); + + this.trigger(AFTER_VALIDATION_EVENT, key); + + return result; + } + + /** + * Takes resolved validation and adds an error or simply returns the value + * + * @method _handleValidation + * @private + */ + _handleValidation ( + validation: ValidationResult, + { key, value }: NewProperty + ): T | IErr | ValidationErr { + + let isValid: boolean = validation === true + || Array.isArray(validation) + && validation.length === 1 + && validation[0] === true; + + // Happy path: remove `key` from error map. + this._deleteKey(ERRORS, key); + + // Error case. + if (!isValid) { + return this.addError(key, { value, validation } as IErr); + } + + return value; + } + + /** + * runs the validator with the key and value + * + * @method _validate + * @private + */ + _validate( + key: string, + newValue: unknown, + oldValue: unknown + ): ValidationResult | Promise { + let validator: ValidatorAction = this[VALIDATOR]; + let content: Content = this[CONTENT]; + + if (typeof validator === 'function') { + let isValid = validator({ + key, + newValue, + oldValue, + changes: get(this, 'change'), + content, + }); + + return typeof isValid === 'boolean' || Boolean(isValid) ? isValid : true; + } + + return true; + } + + /** + * Sets property or error on the changeset. + * Returns value or error + */ + _setProperty ( + { key, value, oldValue }: NewProperty + ): void { + let changes: Changes = this[CHANGES]; + + // Happy path: update change map. + if (!isEqual(oldValue, value)) { + setNestedProperty(changes, key, new Change(value)); + } else if (key in changes) { + this._deleteKey(CHANGES, key); + } + + // Happy path: notify that `key` was added. + // this.notifyPropertyChange(CHANGES); + // this.notifyPropertyChange(key); + } + + /** + * Increment or decrement the number of running validations for a + * given key. + */ + _setIsValidating( + key: string, + value: boolean + ): void { + let running: RunningValidations = this[RUNNING_VALIDATIONS]; + let count: number = running[key] || 0; + + if (!value && count === 1) { + delete running[key]; + return; + } + + deepSet(running, key, value ? count+1 : count-1); + } + + /** + * Value for change or the original value. + */ + _valueFor( + key: string + ): any { + let changes: Changes = this[CHANGES]; + let errors: Errors = this[ERRORS]; + let content: Content = this[CONTENT]; + + if (errors.hasOwnProperty(key)) { + let e: Err = errors[key]; + return e.value; + } + + let original: any = content[key]; + + if (changes.hasOwnProperty(key)) { + let c: Change = changes[key]; + return c.value; + } + + // nested thus circulate through `value` and see if match + if (key.indexOf('.') !== -1) { + let [baseKey, ...keyParts] = key.split('.'); + if (changes.hasOwnProperty(baseKey)) { + let { value } = changes[baseKey]; + // make sure to return value if not object + if(!value) { + return value; + } + let result = value[keyParts.join('.')]; + return result; + } + } + + return original; + } + + /** + * Notifies virtual properties set on the changeset of a change. + * You can specify which keys are notified by passing in an array. + * + * @private + * @param {Array} keys + * @return {Void} + */ + _notifyVirtualProperties( + keys?: string[] + ): void { + if (!keys) { + keys = this._rollbackKeys() + } + // (keys || []).forEach(key => this.notifyPropertyChange(key)); + } + + /** + * Gets the changes and error keys. + */ + _rollbackKeys(): string[] { + let changes: Changes = this[CHANGES]; + let errors: Errors = this[ERRORS]; + return [...new Set([...keys(changes), ...keys(errors)])]; + } + + /** + * Deletes a key off an object and notifies observers. + */ + _deleteKey( + objName: string, + key = '' + ): void { + let obj = this[objName] as InternalMap; + if (obj.hasOwnProperty(key)) { + delete obj[key]; + } + // let c: Buffered = this; + // this.notifyPropertyChange(`${objName}.${key}`); + // this.notifyPropertyChange(objName); + } + + getProperty(key: string): any { + if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { + let changes: Changes = this[CHANGES]; + return changes[key]; + } + + // return getters/setters/methods on BufferedProxy instance + if (this[key]) { + return this[key]; + } + + let content: Content = this[CONTENT]; + return content[key]; + } + + setProperty ( + key: string, + value: T + ): void | Promise> | T | IErr | ValidationResult { + if (this.hasOwnProperty(key)) { + this[key] = value; + } + + return this.setUnknownProperty(key, value); + } +} + +/** + * Creates new changesets. + */ +export function changeset( + obj: object, + validateFn: ValidatorAction = defaultValidatorFn, + validationMap: ValidatorMap = {}, + options: Config = {} +): IChangeset { + return new BufferedChangeset(obj, validateFn, validationMap, options); +} + +export default class ValidatedChangeset { + /** + * Changeset factory + * + * @class ValidatedChangeset + * @constructor + */ + constructor( + obj: object, + validateFn: ValidatorAction = defaultValidatorFn, + validationMap: ValidatorMap = {}, + options: Config = {} + ) { + const c: IChangeset = changeset(obj, validateFn, validationMap, options); + + return new Proxy(c, { + get(targetBuffer, key/*, receiver*/) { + const res = targetBuffer.getProperty(key.toString()); + return res; + }, + + set(targetBuffer, key, value/*, receiver*/) { + targetBuffer.setProperty(key.toString(), value); + return true; + } + }); + } +} diff --git a/addon/index.ts b/addon/index.ts index bbe10a83..9d0c6247 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -1,393 +1,23 @@ import { assert } from '@ember/debug'; -import EmberObject, { get } from '@ember/object'; +import { BufferedChangeset } from './-private/validated-changeset'; +import EmberObject from '@ember/object'; import { - not, - readOnly, -} from '@ember/object/computed'; -import { - isEqual -} from '@ember/utils'; -import Change from 'ember-changeset/-private/change'; -import { notifierForEvent } from 'ember-changeset/-private/evented'; -import Err from 'ember-changeset/-private/err'; -import pureAssign from 'ember-changeset/utils/assign'; -import inflate from 'ember-changeset/utils/computed/inflate'; -import isEmptyObject from 'ember-changeset/utils/computed/is-empty-object'; -import objectToArray from 'ember-changeset/utils/computed/object-to-array'; -import transform from 'ember-changeset/utils/computed/transform'; -import isChangeset, { CHANGESET } from 'ember-changeset/utils/is-changeset'; -import isObject from 'ember-changeset/utils/is-object'; -import isPromise from 'ember-changeset/utils/is-promise'; -import mergeNested from 'ember-changeset/utils/merge-nested'; -import objectWithout from 'ember-changeset/utils/object-without'; -import setNestedProperty from 'ember-changeset/utils/set-nested-property'; -import take from 'ember-changeset/utils/take'; -import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; -import deepSet from 'ember-deep-set'; -import { - Changes, Config, - Content, - Errors, IErr, IChangeset, - INotifier, - InternalMap, NewProperty, - PrepareChangesFn, - RunningValidations, - Snapshot, - ValidationErr, - ValidationResult, ValidatorAction, - ValidatorMap + ValidatorMap, + ValidationErr, } from 'ember-changeset/types'; -const { keys } = Object; -const CONTENT = '_content'; const CHANGES = '_changes'; const ERRORS = '_errors'; -const VALIDATOR = '_validator'; -const OPTIONS = '_options'; -const RUNNING_VALIDATIONS = '_runningValidations'; -const BEFORE_VALIDATION_EVENT = 'beforeValidation'; -const AFTER_VALIDATION_EVENT = 'afterValidation'; -const AFTER_ROLLBACK_EVENT = 'afterRollback'; const defaultValidatorFn = () => true; -const defaultOptions = { skipValidate: false }; - -class Buffered extends EmberObject implements IChangeset { - constructor(obj: object, validateFn: ValidatorAction, validationMap: ValidatorMap, options: Config) { - super(...arguments); - - this.obj = obj; - this.validateFn = validateFn; - this.validationMap = validationMap; - this.options = options; - } - - /** - * Any property that is not one of the getter/setter/methods on the - * BufferedProxy instance. The value type is `unknown` in order to avoid - * having to predefine key/value pairs of the correct types in the target - * object. Setting the index signature to `[key: string]: T[K]` would allow us - * to typecheck the value that is set on the proxy. However, no - * getters/setters/methods can be added to the class. This is the tradeoff - * we make for this particular design pattern (class based BufferedProxy). - */ - [key: string]: unknown; - - __changeset__ = CHANGESET; - - _eventedNotifiers = {}; - _content = {}; - _changes = {}; - _errors = {}; - _validator = defaultValidatorFn; - _options = defaultOptions; - _runningValidations = {}; - _bareChanges = transform(CHANGES, (c: Change) => c.value); - - on(eventName: string, callback: Function): INotifier { - const notifier = notifierForEvent(this, eventName); - return notifier.addListener(callback); - } - - off(eventName: string, callback: Function): INotifier { - const notifier = notifierForEvent(this, eventName); - return notifier.removeListener(callback); - } - - trigger(eventName: string, ...args: any[]): void { - const notifier = notifierForEvent(this, eventName); - if (notifier) { - notifier.trigger.apply(notifier, args); - } - } - - changes = objectToArray(CHANGES, (c: Change) => c.value, false); - errors = objectToArray(ERRORS, (e: Err) => ({ value: e.value, validation: e.validation }), true); - change = inflate(CHANGES, (c: Change) => c.value); - error = inflate(ERRORS, (e: IErr) => ({ value: e.value, validation: e.validation })); - data = readOnly(CONTENT); - - isValid = isEmptyObject(ERRORS); - isPristine = isEmptyObject(CHANGES); - isInvalid = not('isValid').readOnly(); - isDirty = not('isPristine').readOnly(); - - CONTENT = this.obj; - CHANGES = {}; - ERRORS = {}; - VALIDATOR = this.validateFn; - OPTIONS = pureAssign(defaultOptions, this.options as object); - RUNNING_VALIDATIONS = {}; - - /** - * Proxies `get` to the underlying content or changed value, if present. - */ - unknownProperty( - key: string - ): any { - return this._valueFor(key); - } - - /** - * Stores change on the changeset. - * - * @method setUnknownProperty - */ - setUnknownProperty ( - key: string, - value: T - ): void { - let config: Config = this[OPTIONS]; - let skipValidate: boolean | undefined = config['skipValidate']; - - if (skipValidate) { - let content: Content = this[CONTENT]; - let oldValue = content[key]; - this._setProperty({ key, value, oldValue }); - this._handleValidation(true, { key, value }); - } - - let content: Content = this[CONTENT]; - let oldValue: any = content[key]; - this._setProperty({ key, value, oldValue }); - this._validateKey(key, value); - } - - /** - * String representation for the changeset. - */ - toString(): string { - let normalisedContent: object = pureAssign(this[CONTENT], {}); - return `changeset:${normalisedContent.toString()}`; - } - - /** - * Provides a function to run before emitting changes to the model. The - * callback function must return a hash in the same shape: - * - * ``` - * changeset - * .prepare((changes) => { - * let modified = {}; - * - * for (let key in changes) { - * modified[underscore(key)] = changes[key]; - * } - * - * return modified; // { first_name: "Jim", last_name: "Bob" } - * }) - * .execute(); // execute the changes - * ``` - * - * @method prepare - */ - prepare( - prepareChangesFn: PrepareChangesFn - ): IChangeset { - let changes: { [s: string]: any } = this['_bareChanges']; - let preparedChanges = prepareChangesFn(changes); - - assert('Callback to `changeset.prepare` must return an object', isObject(preparedChanges)); - validateNestedObj('preparedChanges', preparedChanges); - - let newObj: Changes = {}; - let newChanges: Changes = keys(preparedChanges).reduce((newObj: Changes, key: keyof Changes) => { - newObj[key] = new Change(preparedChanges[key]); - return newObj; - }, newObj); - - this[CHANGES] = newChanges; - return this; - } - - /** - * Executes the changeset if in a valid state. - * - * @method execute - */ - execute(): IChangeset { - if (this.isValid && this.isDirty) { - let content: Content = this[CONTENT]; - let changes: Changes = this[CHANGES]; - keys(changes).forEach(key => deepSet(content, key, changes[key].value)); - } - return this; - } - - /** - * Executes the changeset and saves the underlying content. - * - * @method save - * @param {Object} options optional object to pass to content save method - */ - save( - options: object - ): Promise { - let content: Content = this[CONTENT]; - let savePromise: any | Promise = Promise.resolve(this); - this.execute(); - - if (typeof content.save === 'function') { - savePromise = content.save(options); - } else if (typeof content.save === 'function') { - // we might be getting this off a proxy object. For example, when a - // belongsTo relationship (a proxy on the parent model) - // another way would be content(belongsTo).content.save - let saveFunc: Function = content.save; - if (saveFunc) { - savePromise = saveFunc(options); - } - } - - return Promise.resolve(savePromise).then((result) => { - this.rollback(); - return result; - }); - } - - /** - * Merges 2 valid changesets and returns a new changeset. Both changesets - * must point to the same underlying object. The changeset target is the - * origin. For example: - * - * ``` - * let changesetA = new Changeset(user, validatorFn); - * let changesetB = new Changeset(user, validatorFn); - * changesetA.set('firstName', 'Jim'); - * changesetB.set('firstName', 'Jimmy'); - * changesetB.set('lastName', 'Fallon'); - * let changesetC = changesetA.merge(changesetB); - * changesetC.execute(); - * user.get('firstName'); // "Jimmy" - * user.get('lastName'); // "Fallon" - * ``` - * - * @method merge - */ - merge( - changeset: IChangeset - ): IChangeset { - let content: Content = this[CONTENT]; - assert('Cannot merge with a non-changeset', isChangeset(changeset)); - assert('Cannot merge with a changeset of different content', changeset[CONTENT] === content); - - if (this.isPristine && changeset.isPristine) { - return this; - } - - let c1: Changes = this[CHANGES]; - let c2: Changes = changeset[CHANGES]; - let e1: Errors = this[ERRORS]; - let e2: Errors = changeset[ERRORS]; - - let newChangeset: any = new Changeset(content, this[VALIDATOR]); // ChangesetDef - let newErrors: Errors = objectWithout(keys(c2), e1); - let newChanges: Changes = objectWithout(keys(e2), c1); - let mergedErrors: Errors = mergeNested(newErrors, e2); - let mergedChanges: Changes = mergeNested(newChanges, c2); - - newChangeset[ERRORS] = mergedErrors; - newChangeset[CHANGES] = mergedChanges; - newChangeset._notifyVirtualProperties(); - return newChangeset; - } - - /** - * Returns the changeset to its pristine state, and discards changes and - * errors. - * - * @method rollback - */ - rollback(): IChangeset { - // Get keys before reset. - let c: Buffered = this; - let keys = c._rollbackKeys(); - - // Reset. - this[CHANGES] = {}; - this[ERRORS] = {}; - c._notifyVirtualProperties(keys) - - c.trigger(AFTER_ROLLBACK_EVENT); - return this; - } - - /** - * Discards any errors, keeping only valid changes. - * - * @public - * @chainable - * @method rollbackInvalid - * @param {String} key optional key to rollback invalid values - * @return {Changeset} - */ - rollbackInvalid(key: string | void): IChangeset { - let errorKeys = keys(this[ERRORS]); - - if (key) { - this._notifyVirtualProperties([key]); - this._deleteKey(ERRORS, key); - if (errorKeys.indexOf(key) > -1) { - this._deleteKey(CHANGES, key); - } - } else { - this._notifyVirtualProperties(); - this[ERRORS] = {}; - - // if on CHANGES hash, rollback those as well - errorKeys.forEach((errKey) => { - this._deleteKey(CHANGES, errKey); - }) - } - - return this; - } - - /** - * Discards changes/errors for the specified properly only. - * - * @public - * @chainable - * @method rollbackProperty - * @param {String} key key to delete off of changes and errors - * @return {Changeset} - */ - rollbackProperty(key: string): IChangeset { - this._deleteKey(CHANGES, key); - this._deleteKey(ERRORS, key); - - return this; - } - - /** - * Validates the changeset immediately against the validationMap passed in. - * If no key is passed into this method, it will validate all fields on the - * validationMap and set errors accordingly. Will throw an error if no - * validationMap is present. - * - * @method validate - */ - validate( - key?: string | undefined - ): Promise | Promise> | Promise>> { - if (keys(this.validationMap as object).length === 0) { - return Promise.resolve(null); - } - - if (!Boolean(key)) { - let maybePromise = keys(this.validationMap as object).map(validationKey => { - return this._validateKey(validationKey, this._valueFor(validationKey)); - }); - - return Promise.all(maybePromise); - } - - return Promise.resolve(this._validateKey(key, this._valueFor(key))); +class EmberChangeset extends BufferedChangeset { + notifyPropertyChange(arg: any) { + return arg; } /** @@ -400,28 +30,15 @@ class Buffered extends EmberObject implements IChangeset { key: string, error: IErr | ValidationErr ): IErr | ValidationErr { - // Construct new `Err` instance. - let newError; - if (isObject(error) && !Array.isArray(error)) { - assert('Error must have value.', error.hasOwnProperty('value')); - assert('Error must have validation.', error.hasOwnProperty('validation')); - newError = new Err((>error).value, (>error).validation); - } else { - newError = new Err(this.key, (error)); - } + super.addError(key, error); - // Add `key` to errors map. - let errors: Errors = this[ERRORS]; - setNestedProperty(errors, key, newError); this.notifyPropertyChange(ERRORS); - // Notify that `key` has changed. this.notifyPropertyChange(key); // Return passed-in `error`. return error; } - /** * Manually push multiple errors to the changeset as an array. * @@ -431,19 +48,7 @@ class Buffered extends EmberObject implements IChangeset { key: keyof IChangeset, ...newErrors: string[] | ValidationErr[] ) { - let errors: Errors = this[ERRORS]; - let existingError: IErr | Err = errors[key] || new Err(null, []); - let validation: ValidationErr | ValidationErr[] = existingError.validation; - let value: any = this[key] - - if (!Array.isArray(validation) && Boolean(validation)) { - existingError.validation = [validation]; - } - - let v = existingError.validation; - validation = [...v, ...newErrors]; - let newError = new Err(value, validation); - setNestedProperty(errors, (key), newError); + const { value, validation } = super.pushErrors(key, ...newErrors); this.notifyPropertyChange(ERRORS); this.notifyPropertyChange((key)); @@ -451,185 +56,6 @@ class Buffered extends EmberObject implements IChangeset { return { value, validation }; } - /** - * Creates a snapshot of the changeset's errors and changes. - * - * @method snapshot - */ - snapshot(): Snapshot { - let changes: Changes = this[CHANGES]; - let errors: Errors = this[ERRORS]; - - return { - changes: keys(changes).reduce((newObj: Changes, key: keyof Changes) => { - newObj[key] = changes[key].value; - return newObj; - }, {}), - - errors: keys(errors).reduce((newObj: Errors, key: keyof Errors) => { - let e = errors[key] - newObj[key] = { value: e.value, validation: e.validation }; - return newObj; - }, {}), - }; - } - - /** - * Restores a snapshot of changes and errors. This overrides existing - * changes and errors. - * - * @method restore - */ - restore({ changes, errors }: Snapshot): IChangeset { - validateNestedObj('snapshot.changes', changes); - validateNestedObj('snapshot.errors', errors); - - let newChanges: Changes = keys(changes).reduce((newObj: Changes, key: keyof Changes) => { - newObj[key] = new Change(changes[key]); - return newObj; - }, {}); - - let newErrors: Errors = keys(errors).reduce((newObj: Errors, key: keyof Changes) => { - let e: IErr = errors[key]; - newObj[key] = new Err(e.value, e.validation); - return newObj; - }, {}); - - this[CHANGES] = newChanges; - this[ERRORS] = newErrors; - - this._notifyVirtualProperties(); - return this; - } - - /** - * Unlike `Ecto.Changeset.cast`, `cast` will take allowed keys and - * remove unwanted keys off of the changeset. For example, this method - * can be used to only allow specified changes through prior to saving. - * - * @method cast - */ - cast(allowed: string[] = []): IChangeset { - let changes: Changes = this[CHANGES]; - - if (Array.isArray(allowed) && allowed.length === 0) { - return this; - } - - let changeKeys: string[] = keys(changes); - let validKeys = changeKeys.filter((key: string) => allowed.includes(key)); - let casted = take(changes, validKeys); - this[CHANGES] = casted; - return this; - } - - /** - * Checks to see if async validator for a given key has not resolved. - * If no key is provided it will check to see if any async validator is running. - * - * @method isValidating - */ - isValidating(key: string | void): boolean { - let runningValidations: RunningValidations = this[RUNNING_VALIDATIONS]; - let ks: string[] = keys(runningValidations); - if (key) { - return ks.includes(key); - } - return ks.length > 0; - } - - /** - * Validates a specific key - * - * @method _validateKey - * @private - */ - _validateKey ( - key: string, - value: T - ): Promise> | T | IErr | ValidationResult { - let content: Content = this[CONTENT]; - let oldValue: any = content[key]; - let validation: ValidationResult | Promise = - this._validate(key, value, oldValue); - - this.trigger(BEFORE_VALIDATION_EVENT, key); - - // TODO: Address case when Promise is rejected. - if (isPromise(validation)) { - this._setIsValidating(key, true); - - return (>validation).then((resolvedValidation: ValidationResult) => { - this._setIsValidating(key, false); - this.trigger(AFTER_VALIDATION_EVENT, key); - - return this._handleValidation(resolvedValidation, { key, value }); - }); - } - - let result = this._handleValidation(validation, { key, value }); - - this.trigger(AFTER_VALIDATION_EVENT, key); - - return result; - } - - /** - * Takes resolved validation and adds an error or simply returns the value - * - * @method _handleValidation - * @private - */ - _handleValidation ( - validation: ValidationResult, - { key, value }: NewProperty - ): T | IErr | ValidationErr { - - let isValid: boolean = validation === true - || Array.isArray(validation) - && validation.length === 1 - && validation[0] === true; - - // Happy path: remove `key` from error map. - this._deleteKey(ERRORS, key); - - // Error case. - if (!isValid) { - return this.addError(key, { value, validation } as IErr); - } - - return value; - } - - /** - * runs the validator with the key and value - * - * @method _validate - * @private - */ - _validate( - key: string, - newValue: unknown, - oldValue: unknown - ): ValidationResult | Promise { - let validator: ValidatorAction = this[VALIDATOR]; - let content: Content = this[CONTENT]; - - if (typeof validator === 'function') { - let isValid = validator({ - key, - newValue, - oldValue, - changes: get(this, 'change'), - content, - }); - - return typeof isValid === 'boolean' || Boolean(isValid) ? isValid : true; - } - - return true; - } - /** * Sets property or error on the changeset. * Returns value or error @@ -637,78 +63,14 @@ class Buffered extends EmberObject implements IChangeset { _setProperty ( { key, value, oldValue }: NewProperty ): void { - let changes: Changes = this[CHANGES]; - - // Happy path: update change map. - if (!isEqual(oldValue, value)) { - setNestedProperty(changes, key, new Change(value)); - } else if (key in changes) { - this._deleteKey(CHANGES, key); - } + super._setProperty({ key, value, oldValue }) + debugger; // Happy path: notify that `key` was added. this.notifyPropertyChange(CHANGES); this.notifyPropertyChange(key); } - /** - * Increment or decrement the number of running validations for a - * given key. - */ - _setIsValidating( - key: string, - value: boolean - ): void { - let running: RunningValidations = this[RUNNING_VALIDATIONS]; - let count: number = running[key] || 0; - - if (!value && count === 1) { - delete running[key]; - return; - } - - deepSet(running, key, value ? count+1 : count-1); - } - - /** - * Value for change or the original value. - */ - _valueFor( - key: string - ): any { - let changes: Changes = this[CHANGES]; - let errors: Errors = this[ERRORS]; - let content: Content = this[CONTENT]; - - if (errors.hasOwnProperty(key)) { - let e: Err = errors[key]; - return e.value; - } - - let original: any = content[key]; - - if (changes.hasOwnProperty(key)) { - let c: Change = changes[key]; - return c.value; - } - - // nested thus circulate through `value` and see if match - if (key.indexOf('.') !== -1) { - let [baseKey, ...keyParts] = key.split('.'); - if (changes.hasOwnProperty(baseKey)) { - let { value } = changes[baseKey]; - // make sure to return value if not object - if(!value) { - return value; - } - let result = value[keyParts.join('.')]; - return result; - } - } - - return original; - } - /** * Notifies virtual properties set on the changeset of a change. * You can specify which keys are notified by passing in an array. @@ -720,19 +82,9 @@ class Buffered extends EmberObject implements IChangeset { _notifyVirtualProperties( keys?: string[] ): void { - if (!keys) { - keys = this._rollbackKeys() - } - (keys || []).forEach(key => this.notifyPropertyChange(key)); - } + super._notifyVirtualProperties(keys); - /** - * Gets the changes and error keys. - */ - _rollbackKeys(): string[] { - let changes: Changes = this[CHANGES]; - let errors: Errors = this[ERRORS]; - return [...new Set([...keys(changes), ...keys(errors)])]; + (keys || []).forEach(key => this.notifyPropertyChange(key)); } /** @@ -742,42 +94,15 @@ class Buffered extends EmberObject implements IChangeset { objName: string, key = '' ): void { - let obj = this[objName] as InternalMap; - if (obj.hasOwnProperty(key)) { - delete obj[key]; - } - // let c: Buffered = this; + super._deleteKey(objName, key); + this.notifyPropertyChange(`${objName}.${key}`); this.notifyPropertyChange(objName); } - - getProperty(key: string): any { - if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { - let changes: Changes = this[CHANGES]; - return changes[key]; - } - - // return getters/setters/methods on BufferedProxy instance - if (this[key]) { - return this[key]; - } - - let content: Content = this[CONTENT]; - return content[key]; - } - - setProperty ( - key: string, - value: T - ): void | Promise> | T | IErr | ValidationResult { - if (this.hasOwnProperty(key)) { - this[key] = value; - } - - return this.setUnknownProperty(key, value); - } } +applyMixins(EmberChangeset, [EmberObject]); + /** * Creates new changesets. */ @@ -786,17 +111,19 @@ export function changeset( validateFn: ValidatorAction = defaultValidatorFn, validationMap: ValidatorMap = {}, options: Config = {} -): IChangeset { +) { assert('Underlying object for changeset is missing', Boolean(obj)); - return new Buffered(obj, validateFn, validationMap, options); + const c = new EmberChangeset(obj, validateFn, validationMap, options); + + return c; } export default class Changeset { /** * Changeset factory * - * @class Changeset + * @class ValidatedChangeset * @constructor */ constructor( @@ -820,3 +147,15 @@ export default class Changeset { }); } } + +function applyMixins(derivedCtor: any, baseCtors: any[]) { + baseCtors.forEach(baseCtor => { + Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => { + Object.defineProperty( + derivedCtor.prototype, + name, + Object.getOwnPropertyDescriptor(baseCtor.prototype, name) + ); + }); + }); +} diff --git a/addon/types/index.ts b/addon/types/index.ts index fb4c5858..465781dc 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -119,4 +119,4 @@ export interface ChangesetDef { _deleteKey: (objName: InternalMapKey, key: string) => void }; -export interface IChangeset extends EmberObject, ChangesetDef, IEvented {} +export interface IChangeset extends ChangesetDef, IEvented {} diff --git a/tsconfig.json b/tsconfig.json index 3bfe8c8e..de07e25e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,10 @@ { "compilerOptions": { - "target": "es2017", + "target": "es2018", "allowJs": true, "moduleResolution": "node", "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, "noImplicitAny": true, "noImplicitThis": true, "alwaysStrict": true, From 3d78cc76ece425990092f5a883a9222704e7613b Mon Sep 17 00:00:00 2001 From: snewcomer Date: Mon, 11 Nov 2019 22:38:26 -0800 Subject: [PATCH 08/75] start unwinding emberisms --- addon/-private/validated-changeset.ts | 51 ++++++++++++++++----------- addon/index.ts | 3 +- addon/types/index.ts | 9 +++-- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 5aadad9d..32618466 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -1,7 +1,6 @@ import { assert } from '@ember/debug'; import { get } from '@ember/object'; import { - not, readOnly, } from '@ember/object/computed'; import { @@ -12,7 +11,6 @@ import { notifierForEvent } from 'ember-changeset/-private/evented'; import Err from 'ember-changeset/-private/err'; import pureAssign from 'ember-changeset/utils/assign'; import inflate from 'ember-changeset/utils/computed/inflate'; -import isEmptyObject from 'ember-changeset/utils/computed/is-empty-object'; import objectToArray from 'ember-changeset/utils/computed/object-to-array'; import transform from 'ember-changeset/utils/computed/transform'; import isChangeset, { CHANGESET } from 'ember-changeset/utils/is-changeset'; @@ -57,18 +55,23 @@ const defaultValidatorFn = () => true; const defaultOptions = { skipValidate: false }; export class BufferedChangeset implements IChangeset { - constructor(obj: object, validateFn: ValidatorAction, validationMap: ValidatorMap, options: Config) { + constructor( + obj: object, + validateFn: ValidatorAction = defaultValidatorFn, + validationMap: ValidatorMap = {}, + options: Config = {} + ) { this.obj = obj; this.validateFn = validateFn; this.validationMap = validationMap; this.options = options; - this.CONTENT = this.obj; - this.CHANGES = {}; - this.ERRORS = {}; - this.VALIDATOR = this.validateFn; - this.OPTIONS = pureAssign(defaultOptions, this.options as object); - this.RUNNING_VALIDATIONS = {}; + this[CONTENT] = obj; + this[CHANGES] = {}; + this[ERRORS] = {}; + this[VALIDATOR] = validateFn; + this[OPTIONS] = pureAssign(defaultOptions, options); + this[RUNNING_VALIDATIONS] = {}; } /** @@ -81,16 +84,16 @@ export class BufferedChangeset implements IChangeset { * we make for this particular design pattern (class based BufferedProxy). */ [key: string]: unknown; + [CONTENT]: object; + [CHANGES]: Changes; + [ERRORS]: Errors; + [VALIDATOR]: ValidatorAction; + [OPTIONS]: {}; + [RUNNING_VALIDATIONS]: {}; __changeset__ = CHANGESET; _eventedNotifiers = {}; - _content = {}; - _changes = {}; - _errors = {}; - _validator = defaultValidatorFn; - _options = defaultOptions; - _runningValidations = {}; _bareChanges = transform(CHANGES, (c: Change) => c.value); on(eventName: string, callback: Function): INotifier { @@ -116,10 +119,18 @@ export class BufferedChangeset implements IChangeset { error = inflate(ERRORS, (e: IErr) => ({ value: e.value, validation: e.validation })); data = readOnly(CONTENT); - isValid = isEmptyObject(ERRORS); - isPristine = isEmptyObject(CHANGES); - isInvalid = not('isValid').readOnly(); - isDirty = not('isPristine').readOnly(); + get isValid() { + return Object.keys(this[ERRORS]).length === 0; + } + get isPristine() { + return Object.keys(this[CHANGES]).length === 0; + } + get isInvalid() { + return !this.isValid; + } + get isDirty() { + return !this.isPristine; + } /** * Proxies `get` to the underlying content or changed value, if present. @@ -752,7 +763,7 @@ export class BufferedChangeset implements IChangeset { getProperty(key: string): any { if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { let changes: Changes = this[CHANGES]; - return changes[key]; + return changes[key].value; } // return getters/setters/methods on BufferedProxy instance diff --git a/addon/index.ts b/addon/index.ts index 9d0c6247..406b9da3 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -65,7 +65,6 @@ class EmberChangeset extends BufferedChangeset { ): void { super._setProperty({ key, value, oldValue }) - debugger; // Happy path: notify that `key` was added. this.notifyPropertyChange(CHANGES); this.notifyPropertyChange(key); @@ -150,7 +149,7 @@ export default class Changeset { function applyMixins(derivedCtor: any, baseCtors: any[]) { baseCtors.forEach(baseCtor => { - Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => { + Object.getOwnPropertyNames(baseCtor.prototype).filter(i => i !== 'constructor').forEach(name => { Object.defineProperty( derivedCtor.prototype, name, diff --git a/addon/types/index.ts b/addon/types/index.ts index 465781dc..b6660f2f 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -1,4 +1,3 @@ -import EmberObject from '@ember/object'; import IEvented, { INotifier } from 'ember-changeset/types/evented'; import { ValidationErr, @@ -83,10 +82,10 @@ export interface ChangesetDef { change: ComputedProperty, data: object, - isValid: ComputedProperty, - isPristine: ComputedProperty, - isInvalid: ComputedProperty, - isDirty: ComputedProperty, + isValid: boolean, + isPristine: boolean, + isInvalid: boolean, + isDirty: boolean, // _super: (...args: Array) => void, // notifyPropertyChange: (s: string) => void, From 69ef57b61466ab48c02c42303c319a001d2fe177 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Tue, 12 Nov 2019 21:36:09 -0800 Subject: [PATCH 09/75] use notifyPropertyChange itself --- addon/index.ts | 38 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/addon/index.ts b/addon/index.ts index 406b9da3..a4e82feb 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -1,6 +1,6 @@ import { assert } from '@ember/debug'; import { BufferedChangeset } from './-private/validated-changeset'; -import EmberObject from '@ember/object'; +import { notifyPropertyChange } from '@ember/object'; import { Config, IErr, @@ -16,10 +16,6 @@ const ERRORS = '_errors'; const defaultValidatorFn = () => true; class EmberChangeset extends BufferedChangeset { - notifyPropertyChange(arg: any) { - return arg; - } - /** * Manually add an error to the changeset. If there is an existing * error or change for `key`, it will be overwritten. @@ -32,9 +28,9 @@ class EmberChangeset extends BufferedChangeset { ): IErr | ValidationErr { super.addError(key, error); - this.notifyPropertyChange(ERRORS); + notifyPropertyChange(this, ERRORS); // Notify that `key` has changed. - this.notifyPropertyChange(key); + notifyPropertyChange(this, key); // Return passed-in `error`. return error; @@ -50,8 +46,8 @@ class EmberChangeset extends BufferedChangeset { ) { const { value, validation } = super.pushErrors(key, ...newErrors); - this.notifyPropertyChange(ERRORS); - this.notifyPropertyChange((key)); + notifyPropertyChange(this, ERRORS); + notifyPropertyChange(this, (key)); return { value, validation }; } @@ -66,8 +62,8 @@ class EmberChangeset extends BufferedChangeset { super._setProperty({ key, value, oldValue }) // Happy path: notify that `key` was added. - this.notifyPropertyChange(CHANGES); - this.notifyPropertyChange(key); + notifyPropertyChange(this, CHANGES); + notifyPropertyChange(this, key); } /** @@ -83,7 +79,7 @@ class EmberChangeset extends BufferedChangeset { ): void { super._notifyVirtualProperties(keys); - (keys || []).forEach(key => this.notifyPropertyChange(key)); + (keys || []).forEach(key => notifyPropertyChange(this, key)); } /** @@ -95,13 +91,11 @@ class EmberChangeset extends BufferedChangeset { ): void { super._deleteKey(objName, key); - this.notifyPropertyChange(`${objName}.${key}`); - this.notifyPropertyChange(objName); + notifyPropertyChange(this, `${objName}.${key}`); + notifyPropertyChange(this, objName); } } -applyMixins(EmberChangeset, [EmberObject]); - /** * Creates new changesets. */ @@ -146,15 +140,3 @@ export default class Changeset { }); } } - -function applyMixins(derivedCtor: any, baseCtors: any[]) { - baseCtors.forEach(baseCtor => { - Object.getOwnPropertyNames(baseCtor.prototype).filter(i => i !== 'constructor').forEach(name => { - Object.defineProperty( - derivedCtor.prototype, - name, - Object.getOwnPropertyDescriptor(baseCtor.prototype, name) - ); - }); - }); -} From a1749d19fb36ae20209ad631719227c5835a9aee Mon Sep 17 00:00:00 2001 From: snewcomer Date: Tue, 12 Nov 2019 23:07:01 -0800 Subject: [PATCH 10/75] simplify w/o ember-isms --- addon/-private/validated-changeset.ts | 66 ++++++++++++++++++++++----- addon/types/index.ts | 10 ++-- addon/utils/computed/inflate.ts | 43 ++++++++--------- tsconfig.json | 2 +- 4 files changed, 77 insertions(+), 44 deletions(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 32618466..d7e1514c 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -1,8 +1,5 @@ +/* TODO: extract */ import { assert } from '@ember/debug'; -import { get } from '@ember/object'; -import { - readOnly, -} from '@ember/object/computed'; import { isEqual } from '@ember/utils'; @@ -11,7 +8,6 @@ import { notifierForEvent } from 'ember-changeset/-private/evented'; import Err from 'ember-changeset/-private/err'; import pureAssign from 'ember-changeset/utils/assign'; import inflate from 'ember-changeset/utils/computed/inflate'; -import objectToArray from 'ember-changeset/utils/computed/object-to-array'; import transform from 'ember-changeset/utils/computed/transform'; import isChangeset, { CHANGESET } from 'ember-changeset/utils/is-changeset'; import isObject from 'ember-changeset/utils/is-object'; @@ -41,7 +37,7 @@ import { ValidatorMap } from 'ember-changeset/types'; -const { keys } = Object; +const { assign, keys } = Object; const CONTENT = '_content'; const CHANGES = '_changes'; const ERRORS = '_errors'; @@ -113,11 +109,57 @@ export class BufferedChangeset implements IChangeset { } } - changes = objectToArray(CHANGES, (c: Change) => c.value, false); - errors = objectToArray(ERRORS, (e: Err) => ({ value: e.value, validation: e.validation }), true); - change = inflate(CHANGES, (c: Change) => c.value); - error = inflate(ERRORS, (e: IErr) => ({ value: e.value, validation: e.validation })); - data = readOnly(CONTENT); + get changes() { + let obj = this[CHANGES]; + + function transform(c: Change) { + return c.value; + } + + return keys(obj).map(key => { + let value = transform(obj[key]); + + return { key, value }; + }); + } + + get errors() { + let obj = this[ERRORS]; + + function transform(e: Err) { + return { value: e.value, validation: e.validation }; + } + + return keys(obj).map(key => { + let value = transform(obj[key]); + + if (isObject(value)) { + return assign({ key }, value); + } + + return { key, value }; + }); + } + + get change() { + let obj: Changes = this[CHANGES]; + function transform(c: Change) { + return c.value; + } + return inflate(obj, transform); + } + + get error() { + let obj: Errors = this[ERRORS]; + function transform(e: Err) { + return { value: e.value, validation: e.validation }; + } + return inflate(obj, transform); + } + + get data() { + return this[CONTENT]; + } get isValid() { return Object.keys(this[ERRORS]).length === 0; @@ -629,7 +671,7 @@ export class BufferedChangeset implements IChangeset { key, newValue, oldValue, - changes: get(this, 'change'), + changes: this.change, content, }); diff --git a/addon/types/index.ts b/addon/types/index.ts index b6660f2f..54ae42bb 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -11,8 +11,6 @@ export { ValidationErr, ValidationResult }; import { Config } from 'ember-changeset/types/config'; export { Config }; -import ComputedProperty from '@ember/object/computed'; - export interface IChange { value: any } @@ -76,10 +74,10 @@ export interface ChangesetDef { _runningValidations: RunningValidations, _bareChanges: { [s: string]: any }, - changes: ComputedProperty, - errors: ComputedProperty, - error: ComputedProperty, - change: ComputedProperty, + changes: { key: string; value: any; }[], //ComputedProperty, + errors: { key: string; value: any; }[], //ComputedProperty, + error: object, + change: object, data: object, isValid: boolean, diff --git a/addon/utils/computed/inflate.ts b/addon/utils/computed/inflate.ts index d13cc871..fd788284 100644 --- a/addon/utils/computed/inflate.ts +++ b/addon/utils/computed/inflate.ts @@ -1,7 +1,4 @@ import { assert, runInDebug } from '@ember/debug'; -import { computed, get } from '@ember/object'; -import ComputedProperty from '@ember/object/computed'; -import { isBlank } from '@ember/utils'; import isObject from 'ember-changeset/utils/is-object'; import deepSet from 'ember-deep-set'; @@ -12,31 +9,27 @@ const { keys } = Object; * `transform` function. */ export default function inflate( - dependentKey: string, + obj: { [key: string]: any }, transform: (arg: T) => any = a => a -): ComputedProperty { - return computed(dependentKey, function() { - let obj: { [key: string]: any } = get(this, dependentKey); - - runInDebug(() => { - keys(obj).forEach(key => { - key.split('.').forEach((_part, i, allParts) => { - if (i < allParts.length - 1) { - let path = allParts.slice(0, i+1).join('.'); - let msg = `Path ${path} leading up to ${key} must be an Object if specified.`; - assert(msg, isObject(obj[path]) || isBlank(obj[path])); - } - }); +): object { + runInDebug(() => { + keys(obj).forEach(key => { + key.split('.').forEach((_part, i, allParts) => { + if (i < allParts.length - 1) { + let path = allParts.slice(0, i+1).join('.'); + let msg = `Path ${path} leading up to ${key} must be an Object if specified.`; + assert(msg, isObject(obj[path]) || !obj[path]); + } }); }); + }); - let result = keys(obj) - .sort() - .reduce((inflatedObj, key) => { - deepSet(inflatedObj, key, transform(obj[key])); - return inflatedObj; - }, {}); + let result = keys(obj) + .sort() + .reduce((inflatedObj, key) => { + deepSet(inflatedObj, key, transform(obj[key])); + return inflatedObj; + }, {}); - return result; - }).readOnly(); + return result; } diff --git a/tsconfig.json b/tsconfig.json index de07e25e..8a6d944e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2018", + "target": "es2017", "allowJs": true, "moduleResolution": "node", "allowSyntheticDefaultImports": true, From df3d415acb1e3848af1210e3eb118d88894adcd3 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Thu, 14 Nov 2019 09:15:36 -0800 Subject: [PATCH 11/75] set resulting --- addon/-private/set-deep.ts | 51 +++++++++++++++++++++++++++ addon/-private/validated-changeset.ts | 32 ++++++++--------- addon/index.ts | 19 +++++++--- addon/types/index.ts | 4 +-- addon/utils/set-nested-property.ts | 1 + 5 files changed, 85 insertions(+), 22 deletions(-) create mode 100644 addon/-private/set-deep.ts diff --git a/addon/-private/set-deep.ts b/addon/-private/set-deep.ts new file mode 100644 index 00000000..25f90e67 --- /dev/null +++ b/addon/-private/set-deep.ts @@ -0,0 +1,51 @@ +export function setDeep(target: any, path: string, value: unknown) { + const keys = split(path).filter(isValidKey); + + if (keys.length === 1) { + result(target, keys[0], value); + return target; + } + + for (let i = 0; i < keys.length; i++) { + let prop = keys[i]; + + if (!isObject(target[prop])) { + target[prop] = {}; + } + + if (i === keys.length - 1) { + result(target, prop, value); + break; + } + + target = target[prop]; + } + + return target; +} + +function result(target: any, path: string, value: unknown) { + if (isPlain(target[path]) && isPlain(value)) { + target[path] = Object.assign({}, target[path], value); + } else { + target[path] = value; + } +} + +function split(path: string): string[] { + const keys = path.split('.'); + + return keys; +} + +function isValidKey(key: unknown) { + return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'; +} + +function isObject(val: unknown) { + return val !== null && (typeof val === 'object' || typeof val === 'function'); +} + +function isPlain(o: unknown) { + return Object.prototype.toString.call(o) === '[object Object]'; +} diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index d7e1514c..aae4a477 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -382,9 +382,9 @@ export class BufferedChangeset implements IChangeset { if (key) { this._notifyVirtualProperties([key]); - this._deleteKey(ERRORS, key); + this[ERRORS] = this._deleteKey(ERRORS, key) as Errors; if (errorKeys.indexOf(key) > -1) { - this._deleteKey(CHANGES, key); + this[CHANGES] = this._deleteKey(CHANGES, key) as Changes; } } else { this._notifyVirtualProperties(); @@ -392,7 +392,7 @@ export class BufferedChangeset implements IChangeset { // if on CHANGES hash, rollback those as well errorKeys.forEach((errKey) => { - this._deleteKey(CHANGES, errKey); + this[CHANGES] = this._deleteKey(CHANGES, errKey) as Changes; }) } @@ -409,8 +409,8 @@ export class BufferedChangeset implements IChangeset { * @return {Changeset} */ rollbackProperty(key: string): IChangeset { - this._deleteKey(CHANGES, key); - this._deleteKey(ERRORS, key); + this[CHANGES] = this._deleteKey(CHANGES, key) as Changes; + this[ERRORS] = this._deleteKey(ERRORS, key) as Errors; return this; } @@ -463,7 +463,7 @@ export class BufferedChangeset implements IChangeset { // Add `key` to errors map. let errors: Errors = this[ERRORS]; - setNestedProperty(errors, key, newError); + this[ERRORS] = setNestedProperty(errors, key, newError); // this.notifyPropertyChange(ERRORS); // Notify that `key` has changed. @@ -494,7 +494,7 @@ export class BufferedChangeset implements IChangeset { let v = existingError.validation; validation = [...v, ...newErrors]; let newError = new Err(value, validation); - setNestedProperty(errors, (key), newError); + this[ERRORS] = setNestedProperty(errors, (key), newError); // this.notifyPropertyChange(ERRORS); // this.notifyPropertyChange((key)); @@ -642,7 +642,7 @@ export class BufferedChangeset implements IChangeset { && validation[0] === true; // Happy path: remove `key` from error map. - this._deleteKey(ERRORS, key); + this[ERRORS] = this._deleteKey(ERRORS, key) as Errors; // Error case. if (!isValid) { @@ -692,9 +692,9 @@ export class BufferedChangeset implements IChangeset { // Happy path: update change map. if (!isEqual(oldValue, value)) { - setNestedProperty(changes, key, new Change(value)); + this[CHANGES] = setNestedProperty(changes, key, new Change(value)); } else if (key in changes) { - this._deleteKey(CHANGES, key); + this[CHANGES] = this._deleteKey(CHANGES, key) as Changes; } // Happy path: notify that `key` was added. @@ -770,11 +770,12 @@ export class BufferedChangeset implements IChangeset { */ _notifyVirtualProperties( keys?: string[] - ): void { + ): string[] | undefined { if (!keys) { keys = this._rollbackKeys() } - // (keys || []).forEach(key => this.notifyPropertyChange(key)); + + return keys; } /** @@ -792,14 +793,13 @@ export class BufferedChangeset implements IChangeset { _deleteKey( objName: string, key = '' - ): void { + ): InternalMap { let obj = this[objName] as InternalMap; if (obj.hasOwnProperty(key)) { delete obj[key]; } - // let c: Buffered = this; - // this.notifyPropertyChange(`${objName}.${key}`); - // this.notifyPropertyChange(objName); + + return obj; } getProperty(key: string): any { diff --git a/addon/index.ts b/addon/index.ts index a4e82feb..46e29e1b 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -1,10 +1,14 @@ import { assert } from '@ember/debug'; import { BufferedChangeset } from './-private/validated-changeset'; import { notifyPropertyChange } from '@ember/object'; +import { tracked } from '@glimmer/tracking'; import { Config, + Changes, + Errors, IErr, IChangeset, + InternalMap, NewProperty, ValidatorAction, ValidatorMap, @@ -16,6 +20,9 @@ const ERRORS = '_errors'; const defaultValidatorFn = () => true; class EmberChangeset extends BufferedChangeset { + @tracked [CHANGES]: Changes; + @tracked [ERRORS]: Errors; + /** * Manually add an error to the changeset. If there is an existing * error or change for `key`, it will be overwritten. @@ -76,10 +83,12 @@ class EmberChangeset extends BufferedChangeset { */ _notifyVirtualProperties( keys?: string[] - ): void { - super._notifyVirtualProperties(keys); + ): string[] | undefined { + keys = super._notifyVirtualProperties(keys); (keys || []).forEach(key => notifyPropertyChange(this, key)); + + return; } /** @@ -88,11 +97,13 @@ class EmberChangeset extends BufferedChangeset { _deleteKey( objName: string, key = '' - ): void { - super._deleteKey(objName, key); + ): InternalMap { + const result = super._deleteKey(objName, key); notifyPropertyChange(this, `${objName}.${key}`); notifyPropertyChange(this, objName); + + return result; } } diff --git a/addon/types/index.ts b/addon/types/index.ts index 54ae42bb..e655dee5 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -111,9 +111,9 @@ export interface ChangesetDef { _setProperty: (obj: NewProperty) => void, _setIsValidating: (key: string, value: boolean) => void, _valueFor: (s: string) => any, - _notifyVirtualProperties: (keys?: string[]) => void, + _notifyVirtualProperties: (keys?: string[]) => string[] | undefined, _rollbackKeys: () => Array, - _deleteKey: (objName: InternalMapKey, key: string) => void + _deleteKey: (objName: InternalMapKey, key: string) => InternalMap }; export interface IChangeset extends ChangesetDef, IEvented {} diff --git a/addon/utils/set-nested-property.ts b/addon/utils/set-nested-property.ts index 7e9b2208..8939ae7c 100644 --- a/addon/utils/set-nested-property.ts +++ b/addon/utils/set-nested-property.ts @@ -7,6 +7,7 @@ const { keys } = Object; * * This function deletes every key prefixed by `key` in `obj`, as well * as every key in the path leading up to `key`. + * Then sets original key on obj after aforementioned cleanup */ export default function setNestedProperty( obj: { [key: string]: T }, From c77295172297698804fb76c11f9fe3d2c4899a85 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Thu, 14 Nov 2019 21:06:04 -0800 Subject: [PATCH 12/75] fix setter --- addon/-private/validated-changeset.ts | 23 ++++++++++++++--------- addon/index.ts | 2 ++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index aae4a477..dd59c3aa 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -251,6 +251,7 @@ export class BufferedChangeset implements IChangeset { return newObj; }, newObj); + // @tracked this[CHANGES] = newChanges; return this; } @@ -382,6 +383,7 @@ export class BufferedChangeset implements IChangeset { if (key) { this._notifyVirtualProperties([key]); + // @tracked this[ERRORS] = this._deleteKey(ERRORS, key) as Errors; if (errorKeys.indexOf(key) > -1) { this[CHANGES] = this._deleteKey(CHANGES, key) as Changes; @@ -409,7 +411,9 @@ export class BufferedChangeset implements IChangeset { * @return {Changeset} */ rollbackProperty(key: string): IChangeset { + // @tracked this[CHANGES] = this._deleteKey(CHANGES, key) as Changes; + // @tracked this[ERRORS] = this._deleteKey(ERRORS, key) as Errors; return this; @@ -463,11 +467,8 @@ export class BufferedChangeset implements IChangeset { // Add `key` to errors map. let errors: Errors = this[ERRORS]; + // @tracked this[ERRORS] = setNestedProperty(errors, key, newError); - // this.notifyPropertyChange(ERRORS); - - // Notify that `key` has changed. - // this.notifyPropertyChange(key); // Return passed-in `error`. return error; @@ -494,6 +495,7 @@ export class BufferedChangeset implements IChangeset { let v = existingError.validation; validation = [...v, ...newErrors]; let newError = new Err(value, validation); + // @tracked this[ERRORS] = setNestedProperty(errors, (key), newError); // this.notifyPropertyChange(ERRORS); @@ -546,7 +548,9 @@ export class BufferedChangeset implements IChangeset { return newObj; }, {}); + // @tracked this[CHANGES] = newChanges; + // @tracked this[ERRORS] = newErrors; this._notifyVirtualProperties(); @@ -570,6 +574,7 @@ export class BufferedChangeset implements IChangeset { let changeKeys: string[] = keys(changes); let validKeys = changeKeys.filter((key: string) => allowed.includes(key)); let casted = take(changes, validKeys); + // @tracked this[CHANGES] = casted; return this; } @@ -642,6 +647,7 @@ export class BufferedChangeset implements IChangeset { && validation[0] === true; // Happy path: remove `key` from error map. + // @tracked this[ERRORS] = this._deleteKey(ERRORS, key) as Errors; // Error case. @@ -692,14 +698,12 @@ export class BufferedChangeset implements IChangeset { // Happy path: update change map. if (!isEqual(oldValue, value)) { + // @tracked this[CHANGES] = setNestedProperty(changes, key, new Change(value)); } else if (key in changes) { + // @tracked this[CHANGES] = this._deleteKey(CHANGES, key) as Changes; } - - // Happy path: notify that `key` was added. - // this.notifyPropertyChange(CHANGES); - // this.notifyPropertyChange(key); } /** @@ -821,8 +825,9 @@ export class BufferedChangeset implements IChangeset { key: string, value: T ): void | Promise> | T | IErr | ValidationResult { - if (this.hasOwnProperty(key)) { + if (this.hasOwnProperty(key) || key in this) { this[key] = value; + return; } return this.setUnknownProperty(key, value); diff --git a/addon/index.ts b/addon/index.ts index 46e29e1b..4c73cfb0 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -17,11 +17,13 @@ import { const CHANGES = '_changes'; const ERRORS = '_errors'; +const CONTENT = '_content'; const defaultValidatorFn = () => true; class EmberChangeset extends BufferedChangeset { @tracked [CHANGES]: Changes; @tracked [ERRORS]: Errors; + @tracked [CONTENT]: object; /** * Manually add an error to the changeset. If there is an existing From 7ec77cee55ed82262c820a56e52f918e1d50b34e Mon Sep 17 00:00:00 2001 From: snewcomer Date: Thu, 14 Nov 2019 21:18:00 -0800 Subject: [PATCH 13/75] change from getProperty to get to align with Ember APIs --- addon/-private/validated-changeset.ts | 8 ++++---- addon/helpers/changeset-get.ts | 2 +- addon/helpers/changeset-set.ts | 2 +- addon/index.ts | 4 ++-- addon/types/index.ts | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index dd59c3aa..4e59c8ac 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -806,7 +806,7 @@ export class BufferedChangeset implements IChangeset { return obj; } - getProperty(key: string): any { + get(key: string): any { if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { let changes: Changes = this[CHANGES]; return changes[key].value; @@ -821,7 +821,7 @@ export class BufferedChangeset implements IChangeset { return content[key]; } - setProperty ( + set ( key: string, value: T ): void | Promise> | T | IErr | ValidationResult { @@ -863,12 +863,12 @@ export default class ValidatedChangeset { return new Proxy(c, { get(targetBuffer, key/*, receiver*/) { - const res = targetBuffer.getProperty(key.toString()); + const res = targetBuffer.get(key.toString()); return res; }, set(targetBuffer, key, value/*, receiver*/) { - targetBuffer.setProperty(key.toString(), value); + targetBuffer.set(key.toString(), value); return true; } }); diff --git a/addon/helpers/changeset-get.ts b/addon/helpers/changeset-get.ts index a571e633..b4ff48bb 100644 --- a/addon/helpers/changeset-get.ts +++ b/addon/helpers/changeset-get.ts @@ -23,6 +23,6 @@ export default class ChangesetGet extends Helper.extend({ return; } - return this.changeset.getProperty(fieldPath); + return this.changeset.get(fieldPath); } } diff --git a/addon/helpers/changeset-set.ts b/addon/helpers/changeset-set.ts index 8003808c..45c564d0 100644 --- a/addon/helpers/changeset-set.ts +++ b/addon/helpers/changeset-set.ts @@ -13,7 +13,7 @@ export function changesetSet( ): Function | void { if (isChangeset(obj)) { return (value: any) => { - return obj.setProperty(path, value); + return obj.set(path, value); } } } diff --git a/addon/index.ts b/addon/index.ts index 4c73cfb0..689bf7e6 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -142,12 +142,12 @@ export default class Changeset { return new Proxy(c, { get(targetBuffer, key/*, receiver*/) { - const res = targetBuffer.getProperty(key.toString()); + const res = targetBuffer.get(key.toString()); return res; }, set(targetBuffer, key, value/*, receiver*/) { - targetBuffer.setProperty(key.toString(), value); + targetBuffer.set(key.toString(), value); return true; } }); diff --git a/addon/types/index.ts b/addon/types/index.ts index e655dee5..ef111147 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -91,8 +91,8 @@ export interface ChangesetDef { // init: () => void, // unknownProperty: (s: string) => any, // setUnknownProperty: (key: string, value: T) => (T | IErr | Promise | Promise> | ValidationResult), - getProperty: (key: string) => any, - setProperty: (key: string, value: T) => (void | T | IErr | Promise | Promise> | ValidationResult), + get: (key: string) => any, + set: (key: string, value: T) => (void | T | IErr | Promise | Promise> | ValidationResult), prepare(preparedChangedFn: PrepareChangesFn): ChangesetDef, execute: () => ChangesetDef, save: (options: object) => Promise, From c85a33a899bf3411e4bbfca7cf13ce6b746aa5b2 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 15 Nov 2019 22:41:23 -0800 Subject: [PATCH 14/75] finish tests --- addon/-private/get-deep.ts | 18 ++++ addon/-private/validated-changeset.ts | 57 ++++++++++--- addon/index.ts | 7 ++ addon/types/index.ts | 2 + addon/utils/computed/transform.ts | 20 ----- addon/utils/set-nested-property.ts | 11 ++- .../integration/components/changeset-test.js | 2 + tests/integration/main-test.js | 19 +++-- tests/unit/changeset-test.js | 19 ++--- tests/unit/utils/computed/inflate-test.js | 85 ++++++++----------- tests/unit/utils/computed/transform-test.js | 25 ------ 11 files changed, 140 insertions(+), 125 deletions(-) create mode 100644 addon/-private/get-deep.ts delete mode 100644 addon/utils/computed/transform.ts delete mode 100644 tests/unit/utils/computed/transform-test.js diff --git a/addon/-private/get-deep.ts b/addon/-private/get-deep.ts new file mode 100644 index 00000000..9b8c6c5e --- /dev/null +++ b/addon/-private/get-deep.ts @@ -0,0 +1,18 @@ +export default function getDeep(root: T, path: string | string[]): any { + let obj: any = root; + + if (path.indexOf('.') === -1) { + return obj[path as string]; + } + let parts = typeof path === 'string' ? path.split('.') : path; + + for (let i = 0; i < parts.length; i++) { + if (obj === undefined || obj === null) { + return undefined; + } + + obj = obj[parts[i]]; + } + + return obj; +} diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 4e59c8ac..4b2646b1 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -8,7 +8,6 @@ import { notifierForEvent } from 'ember-changeset/-private/evented'; import Err from 'ember-changeset/-private/err'; import pureAssign from 'ember-changeset/utils/assign'; import inflate from 'ember-changeset/utils/computed/inflate'; -import transform from 'ember-changeset/utils/computed/transform'; import isChangeset, { CHANGESET } from 'ember-changeset/utils/is-changeset'; import isObject from 'ember-changeset/utils/is-object'; import isPromise from 'ember-changeset/utils/is-promise'; @@ -18,6 +17,7 @@ import setNestedProperty from 'ember-changeset/utils/set-nested-property'; import take from 'ember-changeset/utils/take'; import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; import deepSet from 'ember-deep-set'; +import getDeep from './get-deep'; import { Changes, Config, @@ -60,7 +60,6 @@ export class BufferedChangeset implements IChangeset { this.obj = obj; this.validateFn = validateFn; this.validationMap = validationMap; - this.options = options; this[CONTENT] = obj; this[CHANGES] = {}; @@ -90,7 +89,6 @@ export class BufferedChangeset implements IChangeset { __changeset__ = CHANGESET; _eventedNotifiers = {}; - _bareChanges = transform(CHANGES, (c: Change) => c.value); on(eventName: string, callback: Function): INotifier { const notifier = notifierForEvent(this, eventName); @@ -109,6 +107,33 @@ export class BufferedChangeset implements IChangeset { } } + /** + * @property getDeep + * @override + */ + getDeep = getDeep; + + /** + * @property safeGet + * @override + */ + safeGet(obj: any, key: string) { + return obj[key]; + } + + get _bareChanges() { + function transform(c: Change) { + return c.value; + } + + let obj = this[CHANGES]; + + return keys(obj).reduce((newObj: { [key: string]: any }, key: string) => { + newObj[key] = transform(obj[key]); + return newObj; + }, Object.create(null)); + } + get changes() { let obj = this[CHANGES]; @@ -197,13 +222,14 @@ export class BufferedChangeset implements IChangeset { if (skipValidate) { let content: Content = this[CONTENT]; - let oldValue = content[key]; + let oldValue = this.safeGet(content, key); this._setProperty({ key, value, oldValue }); this._handleValidation(true, { key, value }); + return; } let content: Content = this[CONTENT]; - let oldValue: any = content[key]; + let oldValue: any = this.safeGet(content, key); this._setProperty({ key, value, oldValue }); this._validateKey(key, value); } @@ -462,7 +488,8 @@ export class BufferedChangeset implements IChangeset { assert('Error must have validation.', error.hasOwnProperty('validation')); newError = new Err((>error).value, (>error).validation); } else { - newError = new Err(this.key, (error)); + let value = this[key]; + newError = new Err(value, (error)); } // Add `key` to errors map. @@ -486,7 +513,7 @@ export class BufferedChangeset implements IChangeset { let errors: Errors = this[ERRORS]; let existingError: IErr | Err = errors[key] || new Err(null, []); let validation: ValidationErr | ValidationErr[] = existingError.validation; - let value: any = this[key] + let value: any = this[key]; if (!Array.isArray(validation) && Boolean(validation)) { existingError.validation = [validation]; @@ -605,7 +632,7 @@ export class BufferedChangeset implements IChangeset { value: T ): Promise> | T | IErr | ValidationResult { let content: Content = this[CONTENT]; - let oldValue: any = content[key]; + let oldValue: any = this.safeGet(content, key); let validation: ValidationResult | Promise = this._validate(key, value, oldValue); @@ -740,7 +767,7 @@ export class BufferedChangeset implements IChangeset { return e.value; } - let original: any = content[key]; + let original: any = this.getDeep(content, key); if (changes.hasOwnProperty(key)) { let c: Change = changes[key]; @@ -807,18 +834,28 @@ export class BufferedChangeset implements IChangeset { } get(key: string): any { + // 'person' if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { let changes: Changes = this[CHANGES]; return changes[key].value; } + // 'person.username' + let [baseKey, ...remaining] = key.split('.'); + if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [baseKey])) { + let changes: Changes = this[CHANGES]; + let c: Change = changes[baseKey]; + return this.getDeep(c.value, remaining.join('.')); + } + // return getters/setters/methods on BufferedProxy instance if (this[key]) { return this[key]; } + // finally return on underlying object let content: Content = this[CONTENT]; - return content[key]; + return this.getDeep(content, key); } set ( diff --git a/addon/index.ts b/addon/index.ts index 689bf7e6..b3f796e1 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -2,6 +2,7 @@ import { assert } from '@ember/debug'; import { BufferedChangeset } from './-private/validated-changeset'; import { notifyPropertyChange } from '@ember/object'; import { tracked } from '@glimmer/tracking'; +import { get as safeGet } from '@ember/object'; import { Config, Changes, @@ -25,6 +26,12 @@ class EmberChangeset extends BufferedChangeset { @tracked [ERRORS]: Errors; @tracked [CONTENT]: object; + getDeep = safeGet as any; + + safeGet(obj: any, key: string) { + return safeGet(obj, key); + } + /** * Manually add an error to the changeset. If there is an existing * error or change for `key`, it will be overwritten. diff --git a/addon/types/index.ts b/addon/types/index.ts index ef111147..b33b5da1 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -93,6 +93,8 @@ export interface ChangesetDef { // setUnknownProperty: (key: string, value: T) => (T | IErr | Promise | Promise> | ValidationResult), get: (key: string) => any, set: (key: string, value: T) => (void | T | IErr | Promise | Promise> | ValidationResult), + getDeep: any; + safeGet: (obj: any, key: string) => any, prepare(preparedChangedFn: PrepareChangesFn): ChangesetDef, execute: () => ChangesetDef, save: (options: object) => Promise, diff --git a/addon/utils/computed/transform.ts b/addon/utils/computed/transform.ts deleted file mode 100644 index 1b9535c1..00000000 --- a/addon/utils/computed/transform.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { computed, get } from '@ember/object'; -import ComputedProperty from '@ember/object/computed'; - -const { keys } = Object; - -/** - * Transform an Object's values with a `transform` function. - */ -export default function transform( - dependentKey: string, - transform: (arg: T) => any -): ComputedProperty<{}, {}> { - return computed(dependentKey, function() { - let obj: { [key: string]: any } = get(this, dependentKey); - return keys(obj).reduce((newObj: { [key: string]: any }, key: string) => { - newObj[key] = transform(obj[key]); - return newObj; - }, Object.create(null)); - }); -} diff --git a/addon/utils/set-nested-property.ts b/addon/utils/set-nested-property.ts index 8939ae7c..e3804268 100644 --- a/addon/utils/set-nested-property.ts +++ b/addon/utils/set-nested-property.ts @@ -6,8 +6,15 @@ const { keys } = Object; * Set a property on an `obj`. * * This function deletes every key prefixed by `key` in `obj`, as well - * as every key in the path leading up to `key`. + * as every key in the path leading up to `key`. Keeps keys that don't match. * Then sets original key on obj after aforementioned cleanup + * example ``` + obj: { + 'foo': 'happy', + 'foo.bar': 'freakin', + 'foo.bar.baz': 'holidays', + }, + * ``` */ export default function setNestedProperty( obj: { [key: string]: T }, @@ -32,7 +39,7 @@ export default function setNestedProperty( // Delete keys in path leading up to `key`. key.split('.').slice(0, -1).forEach((_, i, allParts) => { - let key = allParts.slice(0, i+1).join('.'); + let key = allParts.slice(0, i + 1).join('.'); delete obj[key]; }); diff --git a/tests/integration/components/changeset-test.js b/tests/integration/components/changeset-test.js index f0d6cb59..00dedbdb 100644 --- a/tests/integration/components/changeset-test.js +++ b/tests/integration/components/changeset-test.js @@ -265,6 +265,8 @@ module('Integration | Helper | changeset', function(hooks) { await fillIn('#first-name', 'foo'); await fillIn('#last-name', 'bar'); assert.equal(changeset.get('person.firstName'), 'foo', 'should update observable value'); + // TODO: nested keys + // assert.equal(changeset.get('person').firstName, 'foo', 'should update observable value'); assert.equal(changeset.get('_content').person.firstName, 'Jim', 'keeps value on model as execute hasn\'t been called'); // TODO: changeset-set will only apply to changeset and not underlying model // so mut will actually modify underlying object diff --git a/tests/integration/main-test.js b/tests/integration/main-test.js index 0ebe23f9..4d385c0d 100644 --- a/tests/integration/main-test.js +++ b/tests/integration/main-test.js @@ -38,20 +38,23 @@ module('Integration | main', function(hooks) { changeset.execute(); - assert.equal(user.get('profile.firstName'), 'Grace'); - assert.equal(user.get('profile.lastName'), 'Hopper'); - assert.equal(user.get('profile.nickname'), 'g'); + assert.equal(user.get('profile.firstName'), 'Grace', 'firstName after execute'); + assert.equal(user.get('profile.lastName'), 'Hopper', 'lastName after execute'); + assert.equal(user.get('profile.nickname'), 'g', 'nickname after execute'); let profile; profile = await this.store.createRecord('profile', { firstName: 'Terry', lastName: 'Bubblewinkles', nickname: 't' }); changeset.set('profile', profile); - assert.equal(changeset.get('profile').get('firstName'), 'Terry'); - assert.equal(changeset.get('profile').get('lastName'), 'Bubblewinkles'); - assert.equal(changeset.get('profile.firstName'), 'Terry'); - assert.equal(changeset.get('profile.lastName'), 'Bubblewinkles'); - assert.equal(changeset.get('profile.nickname'), 't'); + assert.equal(changeset.get('profile').get('firstName'), 'Terry', 'firstName after set'); + assert.equal(changeset.get('profile').get('lastName'), 'Bubblewinkles', 'lastName after set'); + assert.equal(changeset.get('profile.firstName'), 'Terry', 'firstName after set nested'); + assert.equal(changeset.profile.firstName, 'Terry', 'firstName after set nested'); + assert.equal(changeset.get('profile.lastName'), 'Bubblewinkles', 'lastName after set nested'); + assert.equal(changeset.profile.lastName, 'Bubblewinkles', 'lastName after set nested'); + assert.equal(changeset.get('profile.nickname'), 't', 'nickname after set nested'); + assert.equal(changeset.profile.nickname, 't', 'nickname after set nested'); changeset.execute(); diff --git a/tests/unit/changeset-test.js b/tests/unit/changeset-test.js index 0578fad5..c42fc3b2 100644 --- a/tests/unit/changeset-test.js +++ b/tests/unit/changeset-test.js @@ -571,8 +571,7 @@ module('Unit | Utility | changeset', function(hooks) { }); let c = new Changeset(dummyModel, dummyValidator, dummyValidations); - c.set('org.usa.ny', 'whoop'); - c.set('org.usa.ny', 'i need a vacation'); + c.set('org.usa.br', 'whoop'); let actual = get(c, 'change.org.usa.ny'); let expectedResult = undefined; @@ -1231,7 +1230,7 @@ module('Unit | Utility | changeset', function(hooks) { dummyChangeset.set('options', { persist: true }); dummyChangeset.validate(); - assert.deepEqual(get(dummyChangeset, 'changes.0'), { key: 'options', value: { persist: true }}); + assert.deepEqual(dummyChangeset.changes[0], { key: 'options', value: { persist: true }}); }); test('#validate marks actual valid changes', async function(assert) { @@ -1242,7 +1241,7 @@ module('Unit | Utility | changeset', function(hooks) { dummyChangeset.set('password', false); await dummyChangeset.validate(); - assert.deepEqual(get(dummyChangeset, 'changes'), [{ key: 'name', value: 'foo bar' }, { key: 'password', value: false }]); + assert.deepEqual(dummyChangeset.changes, [{ key: 'name', value: 'foo bar' }, { key: 'password', value: false }]); }); test('#validate does not mark changes when nothing has changed', async function(assert) { @@ -1273,8 +1272,8 @@ module('Unit | Utility | changeset', function(hooks) { let dummyChangeset = new Changeset(dummyModel, dummyValidator, dummyValidations); await dummyChangeset.validate('org.usa.ny'); assert.deepEqual(get(dummyChangeset, 'error.org.usa.ny'), { validation: 'must be present', value: null }, 'should validate immediately'); - assert.deepEqual(get(dummyChangeset, 'changes'), [], 'should not set changes'); - assert.equal(get(dummyChangeset, 'errors.length'), 1, 'should only have 1 error'); + assert.deepEqual(dummyChangeset.changes, [], 'should not set changes'); + assert.equal(dummyChangeset.errors.length, 1, 'should only have 1 error'); }); /** @@ -1302,10 +1301,10 @@ module('Unit | Utility | changeset', function(hooks) { assert.ok(get(dummyChangeset, 'isInvalid'), 'should be invalid'); assert.equal(get(dummyChangeset, 'error.email.validation'), 'Email already taken', 'should add the error'); assert.equal(get(dummyChangeset, 'error.email.value'), 'jim@bob.com', 'addError uses already present value'); - assert.deepEqual(get(dummyChangeset, 'changes'), [{ key: 'email', value: 'jim@bob.com'}], 'errors set as changes on changeset'); - dummyChangeset.set('email', 'unique@email.com'); - assert.ok(get(dummyChangeset, 'isValid'), 'should be valid'); - assert.deepEqual(get(dummyChangeset, 'changes')[0], { key: 'email', value: 'unique@email.com' }, 'has correct changes'); + // assert.deepEqual(get(dummyChangeset, 'changes'), [{ key: 'email', value: 'jim@bob.com'}], 'errors set as changes on changeset'); + // dummyChangeset.set('email', 'unique@email.com'); + // assert.ok(get(dummyChangeset, 'isValid'), 'should be valid'); + // assert.deepEqual(get(dummyChangeset, 'changes')[0], { key: 'email', value: 'unique@email.com' }, 'has correct changes'); }); test('#addError adds an error to the changeset on a nested property', async function(assert) { diff --git a/tests/unit/utils/computed/inflate-test.js b/tests/unit/utils/computed/inflate-test.js index f0328acd..b001d8e2 100644 --- a/tests/unit/utils/computed/inflate-test.js +++ b/tests/unit/utils/computed/inflate-test.js @@ -1,5 +1,4 @@ import inflate from 'ember-changeset/utils/computed/inflate'; -import EmberObject from '@ember/object'; import { module, test } from 'qunit'; module('Unit | Utility | computed/inflate'); @@ -7,89 +6,75 @@ module('Unit | Utility | computed/inflate'); [ { desc: 'precondition: keys must not overwrite each other', - classDef: { - changes: { - 'foo.bar.baz': 42, - 'foo.bar': 42, - 'foo': 42, - }, - inflatedChanges: inflate('changes'), + obj: { + 'foo.bar.baz': 42, + 'foo.bar': 42, + 'foo': 42, }, - actual: obj => () => obj.get('inflatedChanges'), expected: 'Assertion Failed: Path foo leading up to foo.bar.baz must be an Object if specified.', + error: true, method: 'throws', }, { desc: 'precondition: keys must not overwrite each other', - classDef: { - changes: { - 'foo.bar.baz': 42, - 'foo.bar': 42, - }, - inflatedChanges: inflate('changes'), + obj: { + 'foo.bar.baz': 42, + 'foo.bar': 42, }, - actual: obj => () => obj.get('inflatedChanges'), expected: /Assertion Failed: Path foo.bar leading up to foo.bar.baz must be an Object if specified./, + error: true, method: 'throws', }, { desc: 'precondition: path leading up to key can be empty', - classDef: { - changes: { - 'foo.bar.baz': 42, - }, - inflatedChanges: inflate('changes'), + obj: { + 'foo.bar.baz': 42, }, - actual: obj => obj.get('inflatedChanges'), expected: { foo: { bar: { baz: 42 } } }, method: 'deepEqual', }, { desc: 'it works', - classDef: { - changes: { - 'foo.bar.baz': 42, - 'foo.bar': {}, - 'foo': {}, - }, - inflatedChanges: inflate('changes'), + obj: { + 'foo.bar.baz': 42, + 'foo.bar': {}, + 'foo': {}, }, - actual: obj => obj.get('inflatedChanges'), expected: { foo: { bar: { baz: 42 } } }, method: 'deepEqual', }, { desc: "it doesn't overwrite sibling keys", - classDef: { - changes: { - 'foo.bar.baz': 42, - 'foo.bar.qux': 'hello', - 'foo.bar': {}, - 'foo': {}, - }, - inflatedChanges: inflate('changes'), + obj: { + 'foo.bar.baz': 42, + 'foo.bar.qux': 'hello', + 'foo.bar': {}, + 'foo': {}, }, - actual: obj => obj.get('inflatedChanges'), expected: { foo: { bar: { baz: 42, qux: 'hello' } } }, method: 'deepEqual', }, { desc: 'it transforms values with an optional `transform` function', - classDef: { - changes: { - 'foo.bar.baz': { value: 42 }, - 'foo.bar.qux': { value: 'hello' }, - }, - inflatedChanges: inflate('changes', obj => obj.value), + obj: { + 'foo.bar.baz': { value: 42 }, + 'foo.bar.qux': { value: 'hello' }, }, - actual: obj => obj.get('inflatedChanges'), expected: { foo: { bar: { baz: 42, qux: 'hello' } } }, + transform: (e) => e.value, method: 'deepEqual', }, -].forEach(({ desc, classDef, actual, expected, method }) => { +].forEach(({ desc, obj, expected, error = false, transform, method }) => { test(`inflate - ${desc}`, async function(assert) { - let Thing = EmberObject.extend(classDef); - let actually = actual(Thing.create()); - assert[method](actually, expected); + if (error) { + try { + inflate(obj); + } catch(e) { + assert[method](e); + } + } else { + let actually = inflate(obj, transform); + assert[method](actually, expected); + } }); }); diff --git a/tests/unit/utils/computed/transform-test.js b/tests/unit/utils/computed/transform-test.js deleted file mode 100644 index 0f30425b..00000000 --- a/tests/unit/utils/computed/transform-test.js +++ /dev/null @@ -1,25 +0,0 @@ -import transform from 'ember-changeset/utils/computed/transform'; -import EmberObject from '@ember/object'; -import { module, test } from 'qunit'; - -module('Unit | Utility | computed/transform'); - -test('it works', async function(assert) { - let Thing = EmberObject.extend({ - changes: { - 'foo.bar.baz': 42, - hello: 'world', - blah: { foo: { bar: { baz: 42 } } }, - }, - transformed: transform('changes', value => ({ value })), - }); - - let actual = Thing.create().get('transformed'); - let expected = { - 'foo.bar.baz': { value: 42 }, - hello: { value: 'world' }, - blah: { value: { foo: { bar: { baz: 42 } } } }, - }; - - assert.deepEqual(actual, expected); -}); From c213876269fb83715d3ca6583c55ee9c30e91552 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 15 Nov 2019 23:10:47 -0800 Subject: [PATCH 15/75] remove unused files --- addon/-private/set-deep.ts | 2 +- addon/utils/computed/object-equal.ts | 28 ---------- addon/utils/computed/object-to-array.ts | 37 ------------- .../unit/utils/computed/object-equal-test.js | 44 --------------- .../utils/computed/object-to-array-test.js | 54 ------------------- 5 files changed, 1 insertion(+), 164 deletions(-) delete mode 100644 addon/utils/computed/object-equal.ts delete mode 100644 addon/utils/computed/object-to-array.ts delete mode 100644 tests/unit/utils/computed/object-equal-test.js delete mode 100644 tests/unit/utils/computed/object-to-array-test.js diff --git a/addon/-private/set-deep.ts b/addon/-private/set-deep.ts index 25f90e67..e5683344 100644 --- a/addon/-private/set-deep.ts +++ b/addon/-private/set-deep.ts @@ -1,4 +1,4 @@ -export function setDeep(target: any, path: string, value: unknown) { +export default function setDeep(target: any, path: string, value: unknown) { const keys = split(path).filter(isValidKey); if (keys.length === 1) { diff --git a/addon/utils/computed/object-equal.ts b/addon/utils/computed/object-equal.ts deleted file mode 100644 index d0d66a14..00000000 --- a/addon/utils/computed/object-equal.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { computed, get } from '@ember/object'; -import ComputedProperty from '@ember/object/computed'; - -const { keys } = Object; - -/** - * Shallow object comparison computed property. Checks all key/value pairs on - * the first object and compares against the second object. Essentially, this - * means that the second object must have the same key/values as the first, but - * not vice versa. - * - * @public - * @param {string} sourceKey dependent key for first object - * @param {string} compareKey dependent key for second object - * @return {boolean} - */ -export default function objectEqual( - sourceKey: string, - compareKey: string -): ComputedProperty<{}, {}> { - return computed(sourceKey, compareKey, function() { - let source = get(this, sourceKey); - let compare = get(this, compareKey); - - return keys(source) - .reduce((acc, key) => acc && get(source, key) === get(compare, key), true); - }).readOnly(); -} diff --git a/addon/utils/computed/object-to-array.ts b/addon/utils/computed/object-to-array.ts deleted file mode 100644 index 1a1e0f40..00000000 --- a/addon/utils/computed/object-to-array.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { computed, get } from '@ember/object'; -import ComputedProperty from '@ember/object/computed'; -import { assign } from '@ember/polyfills'; -import isObject from 'ember-changeset/utils/is-object'; - -const { keys } = Object; - -/** - * Compute the array form of an object. - * - * Each value of the object is transformed by a passed-in `transform` - * function. - * - * Returns a list of objects, where each object has the form - * `{ key, value }`. If `flattenObjects` is true and the result of - * `transform` is an Object, the resulting object has the form - * `{ key, ...transformResult }`. - */ -export default function objectToArray( - objKey: string, - transform: (arg: T) => any = a => a, - flattenObjects = false -): ComputedProperty { - return computed(objKey, function() { - let obj = get(this, objKey); - - return keys(obj).map(key => { - let value = transform(obj[key]); - - if (flattenObjects && isObject(value)) { - return assign({ key }, value); - } - - return { key, value }; - }) - }).readOnly(); -} diff --git a/tests/unit/utils/computed/object-equal-test.js b/tests/unit/utils/computed/object-equal-test.js deleted file mode 100644 index 9c87e0d0..00000000 --- a/tests/unit/utils/computed/object-equal-test.js +++ /dev/null @@ -1,44 +0,0 @@ -import EmberObject from '@ember/object'; -import objectEqual from 'ember-changeset/utils/computed/object-equal'; -import { module, test } from 'qunit'; - -module('Unit | Utility | computed/object equal'); - -test('it returns true if all first obj KV pairs are present and equal to second obj', async function(assert) { - let Thing = EmberObject.extend({ - first: { name: 'Jim Bob' }, - second: { name: 'Jim Bob', age: 21 }, - isFirstEqualToSecond: objectEqual('first', 'second') - }); - let theThing = Thing.create(); - let result = theThing.get('isFirstEqualToSecond'); - - assert.ok(result); -}); - -test('it returns false if not all first obj KV pairs are present and equal to second obj', async function(assert) { - let Thing = EmberObject.extend({ - first: { name: 'Jim Bob', age: 21 }, - second: { name: 'Jim Bob' }, - isFirstEqualToSecond: objectEqual('first', 'second') - }); - let theThing = Thing.create(); - let result = theThing.get('isFirstEqualToSecond'); - - assert.notOk(result); -}); - -test('it returns true if second obj KV pairs are set to equal first obj', async function(assert) { - let Thing = EmberObject.extend({ - first: { name: 'Jim Bob' }, - second: { name: null }, - isFirstEqualToSecond: objectEqual('first', 'second') - }); - let theThing = Thing.create(); - - assert.notOk(theThing.get('isFirstEqualToSecond')); - - theThing.set('second', { name: 'Jim Bob' }); - - assert.ok(theThing.get('isFirstEqualToSecond')); -}); diff --git a/tests/unit/utils/computed/object-to-array-test.js b/tests/unit/utils/computed/object-to-array-test.js deleted file mode 100644 index 02bb144e..00000000 --- a/tests/unit/utils/computed/object-to-array-test.js +++ /dev/null @@ -1,54 +0,0 @@ -import EmberObject from '@ember/object'; -import objectToArray from 'ember-changeset/utils/computed/object-to-array'; -import { module, test } from 'qunit'; - -module('Unit | Utility | object to array'); - -test('it converts an object into an array', async function(assert) { - let Dummy = EmberObject.extend({ - _object: { - firstName: 'Jim', - lastName: 'Bob' - }, - - values: objectToArray('_object') - }); - let result = Dummy.create().get('values'); - let expectedResult = [ - { key: 'firstName', value: 'Jim' }, - { key: 'lastName', value: 'Bob' } - ]; - assert.deepEqual(result, expectedResult, 'should convert to array'); -}); - -test('it maintains shallow objects when flattenObjects is false', async function(assert) { - let Dummy = EmberObject.extend({ - _object: { - firstName: { - value: 'Jim', - validation: 'Too short' - } - }, - - values: objectToArray('_object', a => a, false) - }); - let result = Dummy.create().get('values'); - let expectedResult = [{ key: 'firstName', value: { value: 'Jim', validation: 'Too short' }}]; - assert.deepEqual(result, expectedResult, 'should convert to array'); -}); - -test('it flattens shallow object values when flattenObjects is true', async function(assert) { - let Dummy = EmberObject.extend({ - _object: { - firstName: { - value: 'Jim', - validation: 'Too short' - } - }, - - values: objectToArray('_object', a => a, true) - }); - let result = Dummy.create().get('values'); - let expectedResult = [{ key: 'firstName', value: 'Jim', validation: 'Too short' }]; - assert.deepEqual(result, expectedResult, 'should convert to array'); -}); From efab568e3a483efafdee647f17033bf57cead10a Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 15 Nov 2019 23:12:55 -0800 Subject: [PATCH 16/75] move around and remove uneeded files --- addon/-private/validated-changeset.ts | 2 +- addon/utils/computed/is-empty-object.ts | 16 --------- addon/utils/{computed => }/inflate.ts | 0 .../utils/computed/is-empty-object-test.js | 35 ------------------- .../unit/utils/{computed => }/inflate-test.js | 2 +- 5 files changed, 2 insertions(+), 53 deletions(-) delete mode 100644 addon/utils/computed/is-empty-object.ts rename addon/utils/{computed => }/inflate.ts (100%) delete mode 100644 tests/unit/utils/computed/is-empty-object-test.js rename tests/unit/utils/{computed => }/inflate-test.js (96%) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 4b2646b1..78681a07 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -7,7 +7,7 @@ import Change from 'ember-changeset/-private/change'; import { notifierForEvent } from 'ember-changeset/-private/evented'; import Err from 'ember-changeset/-private/err'; import pureAssign from 'ember-changeset/utils/assign'; -import inflate from 'ember-changeset/utils/computed/inflate'; +import inflate from 'ember-changeset/utils/inflate'; import isChangeset, { CHANGESET } from 'ember-changeset/utils/is-changeset'; import isObject from 'ember-changeset/utils/is-object'; import isPromise from 'ember-changeset/utils/is-promise'; diff --git a/addon/utils/computed/is-empty-object.ts b/addon/utils/computed/is-empty-object.ts deleted file mode 100644 index fd8b2233..00000000 --- a/addon/utils/computed/is-empty-object.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { assert } from '@ember/debug'; -import { computed, get } from '@ember/object'; -import ComputedProperty from '@ember/object/computed'; -import { isPresent } from '@ember/utils'; - -const { keys } = Object; - -export default function isEmptyObject( - dependentKey: string -): ComputedProperty { - assert('`dependentKey` must be defined', isPresent(dependentKey)); - - return computed(dependentKey, function() { - return keys(get(this, dependentKey)).length === 0; - }).readOnly(); -} diff --git a/addon/utils/computed/inflate.ts b/addon/utils/inflate.ts similarity index 100% rename from addon/utils/computed/inflate.ts rename to addon/utils/inflate.ts diff --git a/tests/unit/utils/computed/is-empty-object-test.js b/tests/unit/utils/computed/is-empty-object-test.js deleted file mode 100644 index 1b93c8d2..00000000 --- a/tests/unit/utils/computed/is-empty-object-test.js +++ /dev/null @@ -1,35 +0,0 @@ -import EmberObject from '@ember/object'; -import isEmptyObject from 'ember-changeset/utils/computed/is-empty-object'; -import { module, test } from 'qunit'; - - -module('Unit | Utility | is empty object'); - -test('it returns true if the object has no keys', async function(assert) { - let Dummy = EmberObject.extend({ - _object: {}, - isEmpty: isEmptyObject('_object') - }); - let result = Dummy.create().get('isEmpty'); - assert.ok(result, 'should be true'); -}); - -test('it returns false if the object has at least 1 key', async function(assert) { - let Dummy = EmberObject.extend({ - _object: { foo: 'bar' }, - isEmpty: isEmptyObject('_object') - }); - let result = Dummy.create().get('isEmpty'); - assert.notOk(result, 'should be false'); -}); - -test('it throws if invoked without dependent key', async function(assert) { - try { - EmberObject.extend({ isEmpty: isEmptyObject() }); - } catch({ message }) { - assert.throws( - ({message}) => message === "Assertion Failed: `dependentKey` must be defined", - 'should throw error' - ); - } -}); diff --git a/tests/unit/utils/computed/inflate-test.js b/tests/unit/utils/inflate-test.js similarity index 96% rename from tests/unit/utils/computed/inflate-test.js rename to tests/unit/utils/inflate-test.js index b001d8e2..b6c9ae10 100644 --- a/tests/unit/utils/computed/inflate-test.js +++ b/tests/unit/utils/inflate-test.js @@ -1,4 +1,4 @@ -import inflate from 'ember-changeset/utils/computed/inflate'; +import inflate from 'ember-changeset/utils/inflate'; import { module, test } from 'qunit'; module('Unit | Utility | computed/inflate'); From a8df21bc5e5c307d1e3cf4c3c1b49ccb9fddf89c Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 16 Nov 2019 08:54:30 -0800 Subject: [PATCH 17/75] overridable set deep --- addon/-private/validated-changeset.ts | 12 +++++++++--- addon/index.ts | 2 ++ addon/types/index.ts | 1 + addon/utils/inflate.ts | 4 ++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 78681a07..967eca4a 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -16,7 +16,7 @@ import objectWithout from 'ember-changeset/utils/object-without'; import setNestedProperty from 'ember-changeset/utils/set-nested-property'; import take from 'ember-changeset/utils/take'; import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; -import deepSet from 'ember-deep-set'; +import setDeep from './set-deep'; import getDeep from './get-deep'; import { Changes, @@ -107,6 +107,12 @@ export class BufferedChangeset implements IChangeset { } } + /** + * @property setDeep + * @override + */ + setDeep = setDeep; + /** * @property getDeep * @override @@ -291,7 +297,7 @@ export class BufferedChangeset implements IChangeset { if (this.isValid && this.isDirty) { let content: Content = this[CONTENT]; let changes: Changes = this[CHANGES]; - keys(changes).forEach(key => deepSet(content, key, changes[key].value)); + keys(changes).forEach(key => this.setDeep(content, key, changes[key].value)); } return this; @@ -749,7 +755,7 @@ export class BufferedChangeset implements IChangeset { return; } - deepSet(running, key, value ? count+1 : count-1); + this.setDeep(running, key, value ? count+1 : count-1); } /** diff --git a/addon/index.ts b/addon/index.ts index b3f796e1..85ff9339 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -15,6 +15,7 @@ import { ValidatorMap, ValidationErr, } from 'ember-changeset/types'; +import deepSet from 'ember-deep-set'; const CHANGES = '_changes'; const ERRORS = '_errors'; @@ -27,6 +28,7 @@ class EmberChangeset extends BufferedChangeset { @tracked [CONTENT]: object; getDeep = safeGet as any; + setDeep = deepSet as any; safeGet(obj: any, key: string) { return safeGet(obj, key); diff --git a/addon/types/index.ts b/addon/types/index.ts index b33b5da1..0e1f02c9 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -94,6 +94,7 @@ export interface ChangesetDef { get: (key: string) => any, set: (key: string, value: T) => (void | T | IErr | Promise | Promise> | ValidationResult), getDeep: any; + setDeep: any; safeGet: (obj: any, key: string) => any, prepare(preparedChangedFn: PrepareChangesFn): ChangesetDef, execute: () => ChangesetDef, diff --git a/addon/utils/inflate.ts b/addon/utils/inflate.ts index fd788284..fb78d4c3 100644 --- a/addon/utils/inflate.ts +++ b/addon/utils/inflate.ts @@ -1,6 +1,6 @@ import { assert, runInDebug } from '@ember/debug'; import isObject from 'ember-changeset/utils/is-object'; -import deepSet from 'ember-deep-set'; +import setDeep from '../-private/set-deep'; const { keys } = Object; @@ -27,7 +27,7 @@ export default function inflate( let result = keys(obj) .sort() .reduce((inflatedObj, key) => { - deepSet(inflatedObj, key, transform(obj[key])); + setDeep(inflatedObj, key, transform(obj[key])); return inflatedObj; }, {}); From cd4490f5f4da25a30a2b2c36cbd270b4bd9dbb0a Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 16 Nov 2019 09:23:02 -0800 Subject: [PATCH 18/75] bump deps --- .eslintrc.js | 14 +- .npmignore | 3 +- .travis.yml | 7 +- addon/-private/set-deep.ts | 4 +- config/ember-try.js | 132 +- ember-cli-build.js | 9 +- package.json | 33 +- tests/dummy/app/app.js | 12 +- tests/dummy/app/router.js | 10 +- tests/dummy/config/environment.js | 2 +- tests/index.html | 1 - yarn.lock | 2373 +++++++++++++++++++++++------ 12 files changed, 1997 insertions(+), 603 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index f2e44bb4..c4b7c412 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,8 +1,12 @@ module.exports = { root: true, + parser: 'babel-eslint', parserOptions: { - ecmaVersion: 2017, - sourceType: 'module' + ecmaVersion: 2018, + sourceType: 'module', + ecmaFeatures: { + legacyDecorators: true + } }, plugins: [ 'ember' @@ -15,13 +19,14 @@ module.exports = { browser: true }, rules: { - 'ember/avoid-leaking-state-in-ember-objects': 0 + 'ember/no-jquery': 'error' }, overrides: [ // node files { files: [ '.eslintrc.js', + '.template-lintrc.js', 'ember-cli-build.js', 'index.js', 'testem.js', @@ -36,8 +41,7 @@ module.exports = { 'tests/dummy/app/**' ], parserOptions: { - sourceType: 'script', - ecmaVersion: 2015 + sourceType: 'script' }, env: { browser: false, diff --git a/.npmignore b/.npmignore index fba91545..81cd0a63 100644 --- a/.npmignore +++ b/.npmignore @@ -8,10 +8,11 @@ # misc /.bowerrc /.editorconfig -/.ember-cli +/.ember-cli.js /.env* /.eslintignore /.eslintrc.js +/.git/ /.gitignore /.template-lintrc.js /.travis.yml diff --git a/.travis.yml b/.travis.yml index 955e468c..ab3e592e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,7 +38,8 @@ jobs: install: - yarn install --non-interactive script: - - yarn lint + - yarn lint:hbs + - yarn lint:js - yarn test - name: "Floating Dependencies" @@ -48,8 +49,8 @@ jobs: # we recommend new addons test the current and previous LTS # as well as latest stable release (bonus points to beta/canary) - stage: "Additional Tests" - env: EMBER_TRY_SCENARIO=ember-lts-2.18 - - env: EMBER_TRY_SCENARIO=ember-lts-3.4 + env: EMBER_TRY_SCENARIO=ember-lts-3.4 + - env: EMBER_TRY_SCENARIO=ember-lts-3.8 - env: EMBER_TRY_SCENARIO=ember-release - env: EMBER_TRY_SCENARIO=ember-beta - env: EMBER_TRY_SCENARIO=ember-canary diff --git a/addon/-private/set-deep.ts b/addon/-private/set-deep.ts index e5683344..b587346c 100644 --- a/addon/-private/set-deep.ts +++ b/addon/-private/set-deep.ts @@ -25,7 +25,7 @@ export default function setDeep(target: any, path: string, value: unknown) { } function result(target: any, path: string, value: unknown) { - if (isPlain(target[path]) && isPlain(value)) { + if (isPlainObject(target[path]) && isPlainObject(value)) { target[path] = Object.assign({}, target[path], value); } else { target[path] = value; @@ -46,6 +46,6 @@ function isObject(val: unknown) { return val !== null && (typeof val === 'object' || typeof val === 'function'); } -function isPlain(o: unknown) { +function isPlainObject(o: unknown) { return Object.prototype.toString.call(o) === '[object Object]'; } diff --git a/config/ember-try.js b/config/ember-try.js index 534df49f..c1d83d6f 100644 --- a/config/ember-try.js +++ b/config/ember-try.js @@ -2,83 +2,73 @@ const getChannelURL = require('ember-source-channel-url'); -module.exports = function() { - return Promise.all([ - getChannelURL('release'), - getChannelURL('beta'), - getChannelURL('canary') - ]).then((urls) => { - return { - useYarn: true, - scenarios: [ - { - name: 'ember-lts-2.18', - env: { - EMBER_OPTIONAL_FEATURES: JSON.stringify({ 'jquery-integration': true }) - }, - npm: { - devDependencies: { - '@ember/jquery': '^0.5.1', - 'ember-source': '~2.18.0' - } +module.exports = async function() { + return { + useYarn: true, + scenarios: [ + { + name: 'ember-lts-3.4', + npm: { + devDependencies: { + 'ember-source': '~3.4.0' } - }, - { - name: 'ember-lts-3.4', - npm: { - devDependencies: { - 'ember-source': '~3.4.0' - } - } - }, - { - name: 'ember-release', - npm: { - devDependencies: { - 'ember-source': urls[0] - } + } + }, + { + name: 'ember-lts-3.8', + npm: { + devDependencies: { + 'ember-source': '~3.8.0' } - }, - { - name: 'ember-beta', - npm: { - devDependencies: { - 'ember-source': urls[1] - } + } + }, + { + name: 'ember-release', + npm: { + devDependencies: { + 'ember-source': await getChannelURL('release') } - }, - { - name: 'ember-canary', - npm: { - devDependencies: { - 'ember-source': urls[2] - } + } + }, + { + name: 'ember-beta', + npm: { + devDependencies: { + 'ember-source': await getChannelURL('beta') } - }, - // The default `.travis.yml` runs this scenario via `yarn test`, - // not via `ember try`. It's still included here so that running - // `ember try:each` manually or from a customized CI config will run it - // along with all the other scenarios. - { - name: 'ember-default', - npm: { - devDependencies: {} + } + }, + { + name: 'ember-canary', + npm: { + devDependencies: { + 'ember-source': await getChannelURL('canary') } + } + }, + // The default `.travis.yml` runs this scenario via `yarn test`, + // not via `ember try`. It's still included here so that running + // `ember try:each` manually or from a customized CI config will run it + // along with all the other scenarios. + { + name: 'ember-default', + npm: { + devDependencies: {} + } + }, + { + name: 'ember-default-with-jquery', + env: { + EMBER_OPTIONAL_FEATURES: JSON.stringify({ + 'jquery-integration': true + }) }, - { - name: 'ember-default-with-jquery', - env: { - EMBER_OPTIONAL_FEATURES: JSON.stringify({ - 'jquery-integration': true - }) - }, - npm: { - devDependencies: { - '@ember/jquery': '^0.5.1' - } + npm: { + devDependencies: { + '@ember/jquery': '^0.5.1' } } - ] - }; - }); + } + ] + }; }; diff --git a/ember-cli-build.js b/ember-cli-build.js index 7d0863b4..dc5a39e1 100644 --- a/ember-cli-build.js +++ b/ember-cli-build.js @@ -3,12 +3,9 @@ const EmberAddon = require('ember-cli/lib/broccoli/ember-addon'); module.exports = function(defaults) { - let project = defaults.project; - let options = {}; - if (project.findAddonByName('ember-native-dom-event-dispatcher')) { - options.vendorFiles = { 'jquery.js': null }; - } - let app = new EmberAddon(defaults, options); + let app = new EmberAddon(defaults, { + // Add options here + }); /* This build file specifies the options for the dummy test app of this diff --git a/package.json b/package.json index d64c2011..795fdb31 100644 --- a/package.json +++ b/package.json @@ -27,11 +27,12 @@ "bugs": "https://github.com/poteto/ember-changeset/issues", "homepage": "https://github.com/poteto/ember-changeset", "dependencies": { - "ember-cli-babel": "^7.1.2", + "ember-cli-babel": "^7.11.1", "ember-deep-set": "^0.2.0" }, "devDependencies": { - "@ember/optional-features": "^0.6.3", + "@ember/optional-features": "^1.0.0", + "babel-eslint": "^10.0.3", "@types/ember": "^3.1.1", "@types/ember-data": "^3.1.9", "@types/ember-qunit": "^3.4.7", @@ -41,29 +42,31 @@ "@types/ember__test-helpers": "^0.7.6", "@types/qunit": "^2.5.3", "@types/rsvp": "^4.0.2", - "broccoli-asset-rev": "^2.7.0", - "ember-cli": "~3.13.1", + "broccoli-asset-rev": "^3.0.0", + "ember-auto-import": "^1.5.2", + "ember-cli": "~3.14.0", "ember-cli-dependency-checker": "^2.0.0", - "ember-cli-eslint": "^4.2.3", - "ember-cli-htmlbars": "^4.0.0", - "ember-cli-inject-live-reload": "^1.8.2", - "ember-qunit": "^3.4.1", + "ember-cli-eslint": "^5.1.0", + "ember-cli-htmlbars": "^4.0.5", + "ember-cli-htmlbars-inline-precompile": "^3.0.0", + "ember-cli-inject-live-reload": "^2.0.1", + "ember-qunit": "^4.5.1", "ember-cli-release": "^1.0.0-beta.2", "ember-cli-shims": "^1.2.0", "ember-cli-sri": "^2.1.1", "ember-cli-typescript": "^1.5.0", - "ember-cli-uglify": "^2.1.0", + "ember-cli-uglify": "^3.0.0", "ember-data": "^3.8.0", "ember-disable-prototype-extensions": "^1.1.3", "ember-export-application-global": "^2.0.0", - "ember-load-initializers": "^1.1.0", + "ember-load-initializers": "^2.1.0", "ember-maybe-import-regenerator": "^0.1.6", - "ember-resolver": "^5.0.1", - "ember-source": "~3.14.0", - "ember-source-channel-url": "^1.1.0", + "ember-resolver": "^5.3.0", + "ember-source": "~3.14.1", + "ember-source-channel-url": "^2.0.1", "ember-try": "^1.2.1", - "eslint-plugin-ember": "^5.2.0", - "eslint-plugin-node": "^7.0.1", + "eslint-plugin-ember": "^7.1.0", + "eslint-plugin-node": "^10.0.0", "loader.js": "^4.7.0", "typescript": "^3.6.4" }, diff --git a/tests/dummy/app/app.js b/tests/dummy/app/app.js index b3b2bd67..8df91db5 100644 --- a/tests/dummy/app/app.js +++ b/tests/dummy/app/app.js @@ -3,12 +3,10 @@ import Resolver from './resolver'; import loadInitializers from 'ember-load-initializers'; import config from './config/environment'; -const App = Application.extend({ - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix, - Resolver -}); +export default class App extends Application { + modulePrefix = config.modulePrefix; + podModulePrefix = config.podModulePrefix; + Resolver = Resolver; +} loadInitializers(App, config.modulePrefix); - -export default App; diff --git a/tests/dummy/app/router.js b/tests/dummy/app/router.js index d0bb0095..224ca426 100644 --- a/tests/dummy/app/router.js +++ b/tests/dummy/app/router.js @@ -1,12 +1,10 @@ import EmberRouter from '@ember/routing/router'; import config from './config/environment'; -const Router = EmberRouter.extend({ - location: config.locationType, - rootURL: config.rootURL -}); +export default class Router extends EmberRouter { + location = config.locationType; + rootURL = config.rootURL; +} Router.map(function() { }); - -export default Router; diff --git a/tests/dummy/config/environment.js b/tests/dummy/config/environment.js index 182d3fcb..9f239369 100644 --- a/tests/dummy/config/environment.js +++ b/tests/dummy/config/environment.js @@ -9,7 +9,7 @@ module.exports = function(environment) { EmberENV: { FEATURES: { // Here you can enable experimental features on an ember canary build - // e.g. 'with-controller': true + // e.g. EMBER_NATIVE_DECORATOR_SUPPORT: true }, EXTEND_PROTOTYPES: { // Prevent Ember Data from overriding Date.parse. diff --git a/tests/index.html b/tests/index.html index e5c6d507..5209b852 100644 --- a/tests/index.html +++ b/tests/index.html @@ -21,7 +21,6 @@ {{content-for "body"}} {{content-for "test-body"}} - diff --git a/yarn.lock b/yarn.lock index cf73a037..cb471b13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,7 +29,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.5.5": +"@babel/core@^7.1.6", "@babel/core@^7.2.2", "@babel/core@^7.6.2": version "7.7.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.2.tgz#ea5b99693bcfc058116f42fa1dd54da412b29d91" integrity sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ== @@ -286,6 +286,11 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@babel/parser@^7.0.0", "@babel/parser@^7.3.4": + version "7.7.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.3.tgz#5fad457c2529de476a248f75b0f090b3060af043" + integrity sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A== + "@babel/parser@^7.4.5", "@babel/parser@^7.7.0", "@babel/parser@^7.7.2": version "7.7.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.2.tgz#ea8334dc77416bfd9473eb470fd00d8245b3943b" @@ -772,6 +777,21 @@ "@babel/parser" "^7.7.0" "@babel/types" "^7.7.0" +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.2.4", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" + integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.2" + "@babel/helper-function-name" "^7.7.0" + "@babel/helper-split-export-declaration" "^7.7.0" + "@babel/parser" "^7.7.2" + "@babel/types" "^7.7.2" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" @@ -787,21 +807,6 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" - integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.2" - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - "@babel/parser" "^7.7.2" - "@babel/types" "^7.7.2" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" @@ -811,7 +816,7 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@babel/types@^7.7.0", "@babel/types@^7.7.2": +"@babel/types@^7.1.6", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2": version "7.7.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.2.tgz#550b82e5571dcd174af576e23f0adba7ffc683f7" integrity sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA== @@ -890,6 +895,11 @@ ember-compatibility-helpers "^1.2.0" inflection "1.12.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.13.1": version "3.13.1" resolved "https://registry.yarnpkg.com/@ember-data/serializer/-/serializer-3.13.1.tgz#0d1f844caa4e98f6f6c7f28341fa6660b7e568c3" @@ -919,18 +929,18 @@ resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.1.1.tgz#d5732c3da593f202e6e1ac6dbee56a758242403f" integrity sha512-GEhri78jdQp/xxPpM6z08KlB0wrHfnfrJ9dmQk7JeQ4XCiMzXsJci7yooQgg/IcTKCM/PxE/IkGCQAo80adMkw== -"@ember/optional-features@^0.6.3": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@ember/optional-features/-/optional-features-0.6.4.tgz#8199f853c1781234fcb1f05090cddd0b822bff69" - integrity sha512-nKmKxMk+Q/BGE8cmfq8KTHnYHVgrU3GHhy/eZ/OTj/fUvzXZhxaEVFOfAXssiOzV3FOQDJjznpbua2TEtHaQRw== +"@ember/optional-features@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@ember/optional-features/-/optional-features-1.1.0.tgz#0ff27ba6e9fc1f1e936e024f6a7cc33a96abffba" + integrity sha512-ST3+gIRH2WtgGcOtf42uM9WaXBY4dj4//zoTYV6GPe8cp0XdJEU63oMo9SbE6+0Efp8lvk96LsX+DVDDZy9Rmw== dependencies: - chalk "^2.3.0" + chalk "^2.4.2" co "^4.6.0" - ember-cli-version-checker "^2.1.0" - glob "^7.1.2" - inquirer "^3.3.0" + ember-cli-version-checker "^3.1.3" + glob "^7.1.5" + inquirer "^6.5.1" mkdirp "^0.5.1" - silent-error "^1.1.0" + silent-error "^1.1.1" util.promisify "^1.0.0" "@ember/ordered-set@^2.0.3": @@ -941,15 +951,63 @@ ember-cli-babel "^6.16.0" ember-compatibility-helpers "^1.1.1" -"@ember/test-helpers@^0.7.26": - version "0.7.27" - resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-0.7.27.tgz#c622cabd0cbb95b34efc1e1b6274ab5a14edc138" - integrity sha512-AQESk0FTFxRY6GyZ8PharR4SC7Fju0rXqNkfNYIntAjzefZ8xEqEM4iXDj5h7gAvfx/8dA69AQ9+p7ubc+KvJg== +"@ember/test-helpers@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-1.7.1.tgz#cc22a954b3b46856518f034bd492a74e0482389f" + integrity sha512-+ioumnanSRJzZ0ZH30FIkB0r41UhVyuWQ9R9Yp1phDWJQDLumxg+25WDr40relwcH6z0Cn6LIEzeTVujO/0Rww== dependencies: - broccoli-funnel "^2.0.1" - ember-assign-polyfill "~2.4.0" - ember-cli-babel "^6.12.0" - ember-cli-htmlbars-inline-precompile "^1.0.0" + broccoli-debug "^0.6.5" + broccoli-funnel "^2.0.2" + ember-assign-polyfill "^2.6.0" + ember-cli-babel "^7.7.3" + ember-cli-htmlbars-inline-precompile "^2.1.0" + ember-test-waiters "^1.1.1" + +"@embroider/core@0.4.3", "@embroider/core@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@embroider/core/-/core-0.4.3.tgz#117973b9761d68aee14d820bbaefeb05d5984ba8" + integrity sha512-n24WU/dGuGDqZrljWoX8raK2wFX3R8iJG0rfCWx+1kW87IvB+ZgS3j4KiZ/S788BA07udrYsrgecYnciG2bBMg== + dependencies: + "@babel/core" "^7.2.2" + "@babel/parser" "^7.3.4" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/traverse" "^7.3.4" + "@babel/types" "^7.3.4" + "@embroider/macros" "0.4.3" + assert-never "^1.1.0" + babel-plugin-syntax-dynamic-import "^6.18.0" + broccoli-persistent-filter "^2.2.2" + broccoli-plugin "^1.3.0" + broccoli-source "^1.1.0" + debug "^3.1.0" + fast-sourcemap-concat "^1.4.0" + filesize "^4.1.2" + fs-extra "^7.0.1" + fs-tree-diff "^2.0.0" + handlebars "^4.0.11" + js-string-escape "^1.0.1" + jsdom "^12.0.0" + json-stable-stringify "^1.0.1" + lodash "^4.17.10" + pkg-up "^2.0.0" + resolve "^1.8.1" + resolve-package-path "^1.2.2" + semver "^5.5.0" + strip-bom "^3.0.0" + typescript-memoize "^1.0.0-alpha.3" + walk-sync "^1.1.3" + +"@embroider/macros@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-0.4.3.tgz#ea5604b8bd578520f15886a428a6c4fa9481abc0" + integrity sha512-vq/Ny2ULpKxq60Sv5usSrz651dXFM5phP/O5G5MWDY8YOodIkRLGqtub34sB0OmwxpCuTntUzl9P/I4wkyQ3Kw== + dependencies: + "@babel/core" "^7.2.2" + "@babel/traverse" "^7.2.4" + "@babel/types" "^7.3.2" + "@embroider/core" "0.4.3" + resolve "^1.8.1" + semver "^5.6.0" "@glimmer/di@^0.2.0": version "0.2.1" @@ -1213,6 +1271,164 @@ resolved "https://registry.yarnpkg.com/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#4151a81b4052c80bc2becbae09f3a9ec010a9c7a" integrity sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg== +"@webassemblyjs/ast@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace" + integrity sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA== + dependencies: + "@webassemblyjs/helper-module-context" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/wast-parser" "1.7.11" + +"@webassemblyjs/floating-point-hex-parser@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz#a69f0af6502eb9a3c045555b1a6129d3d3f2e313" + integrity sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg== + +"@webassemblyjs/helper-api-error@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz#c7b6bb8105f84039511a2b39ce494f193818a32a" + integrity sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg== + +"@webassemblyjs/helper-buffer@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz#3122d48dcc6c9456ed982debe16c8f37101df39b" + integrity sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w== + +"@webassemblyjs/helper-code-frame@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz#cf8f106e746662a0da29bdef635fcd3d1248364b" + integrity sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw== + dependencies: + "@webassemblyjs/wast-printer" "1.7.11" + +"@webassemblyjs/helper-fsm@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz#df38882a624080d03f7503f93e3f17ac5ac01181" + integrity sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A== + +"@webassemblyjs/helper-module-context@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz#d874d722e51e62ac202476935d649c802fa0e209" + integrity sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg== + +"@webassemblyjs/helper-wasm-bytecode@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz#dd9a1e817f1c2eb105b4cf1013093cb9f3c9cb06" + integrity sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ== + +"@webassemblyjs/helper-wasm-section@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz#9c9ac41ecf9fbcfffc96f6d2675e2de33811e68a" + integrity sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-buffer" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/wasm-gen" "1.7.11" + +"@webassemblyjs/ieee754@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz#c95839eb63757a31880aaec7b6512d4191ac640b" + integrity sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.11.tgz#d7267a1ee9c4594fd3f7e37298818ec65687db63" + integrity sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw== + dependencies: + "@xtuc/long" "4.2.1" + +"@webassemblyjs/utf8@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.11.tgz#06d7218ea9fdc94a6793aa92208160db3d26ee82" + integrity sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA== + +"@webassemblyjs/wasm-edit@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz#8c74ca474d4f951d01dbae9bd70814ee22a82005" + integrity sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-buffer" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/helper-wasm-section" "1.7.11" + "@webassemblyjs/wasm-gen" "1.7.11" + "@webassemblyjs/wasm-opt" "1.7.11" + "@webassemblyjs/wasm-parser" "1.7.11" + "@webassemblyjs/wast-printer" "1.7.11" + +"@webassemblyjs/wasm-gen@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz#9bbba942f22375686a6fb759afcd7ac9c45da1a8" + integrity sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/ieee754" "1.7.11" + "@webassemblyjs/leb128" "1.7.11" + "@webassemblyjs/utf8" "1.7.11" + +"@webassemblyjs/wasm-opt@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz#b331e8e7cef8f8e2f007d42c3a36a0580a7d6ca7" + integrity sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-buffer" "1.7.11" + "@webassemblyjs/wasm-gen" "1.7.11" + "@webassemblyjs/wasm-parser" "1.7.11" + +"@webassemblyjs/wasm-parser@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz#6e3d20fa6a3519f6b084ef9391ad58211efb0a1a" + integrity sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-api-error" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/ieee754" "1.7.11" + "@webassemblyjs/leb128" "1.7.11" + "@webassemblyjs/utf8" "1.7.11" + +"@webassemblyjs/wast-parser@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz#25bd117562ca8c002720ff8116ef9072d9ca869c" + integrity sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/floating-point-hex-parser" "1.7.11" + "@webassemblyjs/helper-api-error" "1.7.11" + "@webassemblyjs/helper-code-frame" "1.7.11" + "@webassemblyjs/helper-fsm" "1.7.11" + "@xtuc/long" "4.2.1" + +"@webassemblyjs/wast-printer@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz#c4245b6de242cb50a2cc950174fdbf65c78d7813" + integrity sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/wast-parser" "1.7.11" + "@xtuc/long" "4.2.1" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" + integrity sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g== + +abab@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -1231,23 +1447,41 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= +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 "^3.0.4" + acorn "^5.0.0" -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= +acorn-globals@^4.3.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" -acorn@^5.5.0: +acorn-jsx@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" + integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== + +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^5.0.0, acorn@^5.6.2: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== +acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7: + version "6.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" + integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + acorn@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" @@ -1258,22 +1492,17 @@ after@0.8.2: resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" +ajv-keywords@^3.1.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== -ajv@^6.5.5: +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== @@ -1303,7 +1532,7 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: +ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== @@ -1333,7 +1562,7 @@ ansi-styles@^2.2.1: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.0.0, ansi-styles@^3.2.1: +ansi-styles@^3.0.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1382,7 +1611,7 @@ aot-test-generators@^0.1.0: dependencies: jsesc "^2.5.0" -aproba@^1.0.3: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== @@ -1480,6 +1709,15 @@ asap@^2.0.0: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -1487,6 +1725,11 @@ asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" +assert-never@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.0.tgz#e6597ed9e357f7e62c074dfa7c71e30ed7b67a8b" + integrity sha512-61QPxh2lfV5j2dBsEtwhz8/sUj+baAIuCpQxeWorGeMxlTkbeyGyq7igxJB8yij1JdzUhyoiekNHMXrMYnkjvA== + assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" @@ -1497,6 +1740,14 @@ assert-plus@^0.2.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -1512,6 +1763,11 @@ ast-types@0.9.6: resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk= +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + async-disk-cache@^1.2.1: version "1.3.4" resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-1.3.4.tgz#a5c9f72f199a9933583659f57a0e11377884f816" @@ -1535,7 +1791,7 @@ async-limiter@^1.0.0, async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async-promise-queue@^1.0.3, async-promise-queue@^1.0.4: +async-promise-queue@^1.0.3, async-promise-queue@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/async-promise-queue/-/async-promise-queue-1.0.5.tgz#cb23bce9fce903a133946a700cc85f27f09ea49d" integrity sha512-xi0aQ1rrjPWYmqbwr18rrSKbSaXIeIwSd1J4KAgVfkq8utNbdZoht7GfvfY6swFUAMJ9obkc4WPJmtGwl+B8dw== @@ -1587,7 +1843,7 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +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" integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= @@ -1596,7 +1852,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.26.0: +babel-core@^6.26.0, babel-core@^6.26.3: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== @@ -1621,6 +1877,18 @@ babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.7" +babel-eslint@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" + integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" @@ -1748,6 +2016,16 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-loader@^8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + dependencies: + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + pify "^4.0.1" + babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" @@ -1810,10 +2088,15 @@ babel-plugin-filter-imports@^3.0.0: "@babel/types" "^7.4.0" lodash "^4.17.11" -babel-plugin-htmlbars-inline-precompile@^0.2.5: - version "0.2.6" - resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-0.2.6.tgz#c00b8a3f4b32ca04bf0f0d5169fcef3b5a66d69d" - integrity sha512-H4H75TKGUFij8ukwEYWEERAgrUf16R8NSK1uDPe3QwxT8mnE1K8+/s6DVjUqbM5Pv6lSIcE4XufXdlSX+DTB6g== +babel-plugin-htmlbars-inline-precompile@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-1.0.0.tgz#a9d2f6eaad8a3f3d361602de593a8cbef8179c22" + integrity sha512-4jvKEHR1bAX03hBDZ94IXsYCj3bwk9vYsn6ux6JZNL2U5pvzCWjqyrGahfsGNrhERyxw8IqcirOi9Q6WCo3dkQ== + +babel-plugin-htmlbars-inline-precompile@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-2.1.1.tgz#59edd4eab28d27fbafa26d51bc19795278d103a9" + integrity sha512-obo5//IFrEZNAQovcXxOXLn5nwkQ0Y+xhR7AMg1sYR6W7KxQLZI9/XzbIytVhjwwY+Bd2e0+qyHEplJbHyZ1Og== babel-plugin-htmlbars-inline-precompile@^3.0.0: version "3.0.0" @@ -1836,6 +2119,11 @@ babel-plugin-syntax-async-functions@^6.8.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= + babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" @@ -2208,6 +2496,11 @@ base64-js@0.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.2.tgz#024f0f72afa25b75f9c0ee73cd4f55ec1bed9784" integrity sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q= +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + base64id@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" @@ -2247,6 +2540,11 @@ better-assert@~1.0.0: dependencies: callsite "1.0.0" +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -2281,11 +2579,16 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.1.1, bluebird@^3.4.6: +bluebird@^3.1.1, bluebird@^3.4.6, bluebird@^3.5.5: version "3.7.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -2375,22 +2678,22 @@ broccoli-amd-funnel@^2.0.1: broccoli-plugin "^1.3.0" symlink-or-copy "^1.2.0" -broccoli-asset-rev@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/broccoli-asset-rev/-/broccoli-asset-rev-2.7.0.tgz#c73da1d97c4180366fa442a87624ca1b7fb99161" - integrity sha512-GZ7gU3Qo6HMAUqDeh1q+4UVCQPJPjCyGcpIY5s9Qp58a244FT4nZSiy8qYkVC4LLIWTZt59G7jFFsUcj/13IPQ== +broccoli-asset-rev@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/broccoli-asset-rev/-/broccoli-asset-rev-3.0.0.tgz#65a28c8a062d6ee2cffd91ed2a8309e0f8253ac6" + integrity sha512-gAHQZnwvtl74tGevUqGuWoyOdJUdMMv0TjGSMzbdyGImr9fZcnM6xmggDA8bUawrMto9NFi00ZtNUgA4dQiUBw== dependencies: - broccoli-asset-rewrite "^1.1.0" + broccoli-asset-rewrite "^2.0.0" broccoli-filter "^1.2.2" broccoli-persistent-filter "^1.4.3" json-stable-stringify "^1.0.0" minimatch "^3.0.4" rsvp "^3.0.6" -broccoli-asset-rewrite@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/broccoli-asset-rewrite/-/broccoli-asset-rewrite-1.1.0.tgz#77a5da56157aa318c59113245e8bafb4617f8830" - integrity sha1-d6XaVhV6oxjFkRMkXouvtGF/iDA= +broccoli-asset-rewrite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/broccoli-asset-rewrite/-/broccoli-asset-rewrite-2.0.0.tgz#603c4a52d4c8987a2f681254436923ac0a9c94ab" + integrity sha512-dqhxdQpooNi7LHe8J9Jdxp6o3YPFWl4vQmint6zrsn2sVbOo+wpyiX3erUSt0IBtjNkAxqJjuvS375o2cLBHTA== dependencies: broccoli-filter "^1.2.3" @@ -2612,15 +2915,15 @@ broccoli-kitchen-sink-helpers@^0.3.1: glob "^5.0.10" mkdirp "^0.5.1" -broccoli-lint-eslint@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/broccoli-lint-eslint/-/broccoli-lint-eslint-4.2.1.tgz#f780dc083a7357a9746a9cfa8f76feb092777477" - integrity sha512-Jvm06UvuMPa5gEH+9/Sb+QpoIodDAYzbyIUEqxniPCdA6JJooa91hQDCTJc32RUV46JNMcLhb3Dl55BdA8v5mw== +broccoli-lint-eslint@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/broccoli-lint-eslint/-/broccoli-lint-eslint-5.0.0.tgz#05365879d597dd78496a1c718db0e5ea5d4a2bde" + integrity sha512-V7M6U4th21bf1X4u3KoZa0xkcPq9JCSyKxB/nCWCBFMI3rkrB8nlyDLd8DKIUTqL+ojlFOGV5lohPZwndw0sZw== dependencies: aot-test-generators "^0.1.0" broccoli-concat "^3.2.2" - broccoli-persistent-filter "^1.4.3" - eslint "^4.0.0" + broccoli-persistent-filter "^2.1.0" + eslint "^5.6.0" json-stable-stringify "^1.0.1" lodash.defaultsdeep "^4.6.0" md5-hex "^2.0.0" @@ -2718,7 +3021,7 @@ broccoli-persistent-filter@^1.1.6, broccoli-persistent-filter@^1.4.3: 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.1.0, broccoli-persistent-filter@^2.2.1, broccoli-persistent-filter@^2.2.2, broccoli-persistent-filter@^2.3.0, broccoli-persistent-filter@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz#4a052e0e0868b344c3a2977e35a3d497aa9eca72" integrity sha512-hVsmIgCDrl2NFM+3Gs4Cr2TA6UPaIZip99hN8mtkaUPgM8UeVnCbxelCvBjUBHo0oaaqP5jzqqnRVvb568Yu5g== @@ -2864,22 +3167,22 @@ broccoli-stew@^3.0.0: symlink-or-copy "^1.2.0" walk-sync "^1.1.3" -broccoli-uglify-sourcemap@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/broccoli-uglify-sourcemap/-/broccoli-uglify-sourcemap-2.2.0.tgz#2ff49389bdf342a550c3596750ba2dde95a8f7d4" - integrity sha1-L/STib3zQqVQw1lnULot3pWo99Q= +broccoli-uglify-sourcemap@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/broccoli-uglify-sourcemap/-/broccoli-uglify-sourcemap-3.2.0.tgz#d96f1d41f6c18e9a5d49af1a5ab9489cdcac1c6c" + integrity sha512-kkkn8v7kXdWwnZNekq+3ILuTAGkZoaoEMUYCKoER5/uokuoyTjtdYLHaE7UxHkuPEuLfjvJYv21sCCePZ74/2g== dependencies: - async-promise-queue "^1.0.4" + async-promise-queue "^1.0.5" broccoli-plugin "^1.2.1" - debug "^3.1.0" - lodash.defaultsdeep "^4.6.0" - matcher-collection "^1.0.5" + debug "^4.1.0" + lodash.defaultsdeep "^4.6.1" + matcher-collection "^2.0.0" mkdirp "^0.5.0" source-map-url "^0.4.0" symlink-or-copy "^1.0.1" - terser "^3.7.5" - walk-sync "^0.3.2" - workerpool "^2.3.0" + terser "^4.3.9" + walk-sync "^1.1.3" + workerpool "^5.0.1" broccoli@^3.2.0: version "3.2.0" @@ -2909,6 +3212,75 @@ broccoli@^3.2.0: underscore.string "^3.2.2" watch-detector "^0.1.0" +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + browserslist@^3.2.6: version "3.2.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" @@ -2956,11 +3328,30 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + builtins@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz#355219cd6cf18dbe7c01cc7fd2dce765cfdc549a" @@ -2986,6 +3377,27 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3021,22 +3433,15 @@ calculate-cache-key-for-tree@^2.0.0: dependencies: json-stable-stringify "^1.0.1" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= - dependencies: - callsites "^0.2.0" - callsite@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== can-symlink@^1.0.0: version "1.0.0" @@ -3050,13 +3455,6 @@ caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000999: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001002.tgz#ba999a737b1abd5bf0fd47efe43a09b9cadbe9b0" integrity sha512-pRuxPE8wdrWmVPKcDmJJiGBxr6lFJq4ivdSeo9FTmGj5Rb8NX3Mby2pARG57MXF15hYAhZ0nHV5XxT2ig4bz3g== -capture-exit@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" - integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28= - dependencies: - rsvp "^3.3.3" - capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -3107,11 +3505,6 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3124,7 +3517,7 @@ charm@^1.0.0: dependencies: inherits "^2.0.1" -chokidar@^2.0.3: +chokidar@^2.0.2, chokidar@^2.0.3: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -3153,15 +3546,25 @@ chownr@~1.0.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" integrity sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE= +chrome-trace-event@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" class-utils@^0.3.5: version "0.3.6" @@ -3326,7 +3729,7 @@ commander@2.8.x: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.15.1, commander@^2.19.0, commander@^2.6.0, commander@^2.9.0, commander@~2.20.3: +commander@^2.15.1, commander@^2.20.0, commander@^2.6.0, commander@^2.9.0, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -3336,6 +3739,11 @@ common-tags@^1.4.0, common-tags@^1.8.0: resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -3381,7 +3789,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.4.6, concat-stream@^1.6.0: +concat-stream@^1.4.6, concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -3421,6 +3829,11 @@ connect@^3.6.6: parseurl "~1.3.3" utils-merge "1.0.1" +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -3444,6 +3857,11 @@ consolidate@^0.15.1: dependencies: bluebird "^3.1.1" +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -3490,6 +3908,18 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + copy-dereference@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/copy-dereference/-/copy-dereference-1.0.0.tgz#6b131865420fd81b413ba994b44d3655311152b6" @@ -3508,6 +3938,11 @@ core-js-compat@^3.1.1: browserslist "^4.7.1" semver "^6.3.0" +core-js@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4= + core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: version "2.6.10" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" @@ -3525,6 +3960,14 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + create-error-class@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" @@ -3532,7 +3975,30 @@ create-error-class@^3.0.0: dependencies: capture-stack-trace "^1.0.0" -cross-spawn@^5.0.1, cross-spawn@^5.1.0: +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= @@ -3541,7 +4007,7 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -3559,11 +4025,45 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +cssom@0.3.x, cssom@^0.3.4: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== + dependencies: + cssom "0.3.x" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -3584,6 +4084,15 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-urls@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.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" @@ -3598,7 +4107,7 @@ debug@^3.0.0, debug@^3.0.1, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: +debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -3690,6 +4199,14 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -3730,13 +4247,34 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" +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== + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + dot-prop@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" @@ -3754,6 +4292,16 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -3782,20 +4330,67 @@ electron-to-chromium@^1.3.284, electron-to-chromium@^1.3.47: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.292.tgz#7812fc5138619342f1dd5823df6e9cbb7d2820e9" integrity sha512-hqkem5ANpt6mxVXmhAmlbdG8iicuyM/jEYgmP1tiHPeOLyZoTyGUzrDmJS/xyrrZy9frkW1uQcubicu7f6DS5g== -ember-assign-polyfill@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/ember-assign-polyfill/-/ember-assign-polyfill-2.4.0.tgz#acb00466f7d674b3e6b030acfe255b3b1f6472e1" - integrity sha512-0SnGQb9CenRqbZdIa1KFsEjT+1ijGWfAbCSaDbg5uVa5l6HPdppuTzOXK6sfEQMsd2nbrp27QWFy7W5VX6l4Ag== +elliptic@^6.0.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" + integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== dependencies: - ember-cli-babel "^6.6.0" + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +ember-assign-polyfill@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/ember-assign-polyfill/-/ember-assign-polyfill-2.6.0.tgz#07847e3357ee35b33f886a0b5fbec6873f6860eb" + integrity sha512-Y8NzOmHI/g4PuJ+xC14eTYiQbigNYddyHB8FY2kuQMxThTEIDE7SJtgttJrYYcPciOu0Tnb5ff36iO46LeiXkw== + dependencies: + ember-cli-babel "^6.16.0" ember-cli-version-checker "^2.0.0" +ember-auto-import@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.5.3.tgz#b32936f874d1ed7057ad2ed3f6116357820be44b" + integrity sha512-7JfdunM1BmLy/lyUXu7uEoi0Gi4+dxkGM23FgIEyW5g7z4MidhP53Fc61t49oPSnq7+J4lLpbH1f6C+mDMgb4A== + dependencies: + "@babel/core" "^7.1.6" + "@babel/preset-env" "^7.0.0" + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.1.6" + "@embroider/core" "^0.4.3" + babel-core "^6.26.3" + babel-loader "^8.0.6" + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-template "^6.26.0" + babylon "^6.18.0" + broccoli-debug "^0.6.4" + broccoli-plugin "^1.3.0" + debug "^3.1.0" + ember-cli-babel "^6.6.0" + enhanced-resolve "^4.0.0" + fs-extra "^6.0.1" + fs-tree-diff "^1.0.0" + handlebars "^4.3.1" + js-string-escape "^1.0.1" + lodash "^4.17.10" + mkdirp "^0.5.1" + pkg-up "^2.0.0" + resolve "^1.7.1" + rimraf "^2.6.2" + symlink-or-copy "^1.2.0" + typescript-memoize "^1.0.0-alpha.3" + walk-sync "^0.3.3" + webpack "~4.28" + ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.0.tgz#de3baedd093163b6c2461f95964888c1676325ac" integrity sha512-Zr4my8Xn+CzO0gIuFNXji0eTRml5AxZUTDQz/wsNJ5AJAtyFWCY4QtKdoELNNbiCVGt1lq5yLiwTm4scGKu6xA== -ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2: +ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.16.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1: version "6.18.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957" integrity sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA== @@ -3814,7 +4409,7 @@ ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6 ember-cli-version-checker "^2.1.2" semver "^5.5.0" -ember-cli-babel@^7.1.2, ember-cli-babel@^7.11.0, ember-cli-babel@^7.8.0: +ember-cli-babel@^7.1.2, ember-cli-babel@^7.11.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0: version "7.12.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.12.0.tgz#064997d199384be8c88d251f30ef67953d3bddc5" integrity sha512-+EGQsbPvh19nNXHCm6rVBx2CdlxQlzxMyhey5hsGViDPriDI4PFYXYaFWdGizDrmZoDcG/Ywpeph3hl0NxGQTg== @@ -3863,33 +4458,45 @@ ember-cli-dependency-checker@^2.0.0: resolve "^1.5.0" semver "^5.3.0" -ember-cli-eslint@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/ember-cli-eslint/-/ember-cli-eslint-4.2.3.tgz#2844d3f5e8184f19b2d7132ba99eb0b370b55598" - integrity sha512-1fqRz9QVLTT790Zr07aDFmAprZ1vVsaBGJOGQgDEFmBpogq8BeaQopaxogWFp748hol8nGC4QP5tbzhVD6KQHw== +ember-cli-eslint@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ember-cli-eslint/-/ember-cli-eslint-5.1.0.tgz#acdb9b072911e04b07c313b610f514db4086d21a" + integrity sha512-o6787b0tgkRNp+KJo5BiQxtkLuz/yyYqVWF31LPrh+ZCC8jETrfyjsuk8VPDxKLGq7qEiQNJUgOEW87HTad7Vg== dependencies: - broccoli-lint-eslint "^4.2.1" - ember-cli-version-checker "^2.1.0" + broccoli-lint-eslint "^5.0.0" + ember-cli-version-checker "^3.0.0" rsvp "^4.6.1" - walk-sync "^0.3.0" + walk-sync "^1.0.0" ember-cli-get-component-path-option@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ember-cli-get-component-path-option/-/ember-cli-get-component-path-option-1.0.0.tgz#0d7b595559e2f9050abed804f1d8eff1b08bc771" integrity sha1-DXtZVVni+QUKvtgE8djv8bCLx3E= -ember-cli-htmlbars-inline-precompile@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-1.0.5.tgz#312e050c9e3dd301c55fb399fd706296cd0b1d6a" - integrity sha512-/CNEqPxroIcbY6qejrt704ZaghHLCntZKYLizFfJ2esirXoJx6fuYKBY1YyJ8GOgjfbHHKjBZuK4vFFJpkGqkQ== +ember-cli-htmlbars-inline-precompile@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-2.1.0.tgz#61b91ff1879d44ae504cadb46fb1f2604995ae08" + integrity sha512-BylIHduwQkncPhnj0ZyorBuljXbTzLgRo6kuHf1W+IHFxThFl2xG+r87BVwsqx4Mn9MTgW9SE0XWjwBJcSWd6Q== dependencies: - babel-plugin-htmlbars-inline-precompile "^0.2.5" + babel-plugin-htmlbars-inline-precompile "^1.0.0" ember-cli-version-checker "^2.1.2" hash-for-dep "^1.2.3" heimdalljs-logger "^0.1.9" silent-error "^1.1.0" -ember-cli-htmlbars@^4.0.0: +ember-cli-htmlbars-inline-precompile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-3.0.1.tgz#dc1f6fbc3bb5e51d01ca334e692c7f0b5e298d57" + integrity sha512-mLGJjxEPiOFty9HVM7LHg+5cfM1M9lwbEBmlanZMM333cnwvgZulKjTYU0/e0tpWDvNvPdX8rM+/Leh0TIrqqA== + dependencies: + babel-plugin-htmlbars-inline-precompile "^2.1.0" + ember-cli-version-checker "^3.1.3" + hash-for-dep "^1.5.1" + heimdalljs-logger "^0.1.9" + semver "^6.3.0" + silent-error "^1.1.0" + +ember-cli-htmlbars@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-4.0.8.tgz#e87b62e7040bd478a2d007053bdb1644dd1685b0" integrity sha512-B6fzlqmv2E2dl8P6UIYu3bY8nZU2kKfl1VkEIgxFAINfsu9fP65kX/bKzHqGhHF8nAtWBoXZWw6tomHKfUT/Jg== @@ -3910,13 +4517,13 @@ ember-cli-htmlbars@^4.0.0: strip-bom "^4.0.0" walk-sync "^2.0.2" -ember-cli-inject-live-reload@^1.8.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-1.10.2.tgz#43c59f7f1d1e717772da32e5e81d948fb9fe7c94" - integrity sha512-yFvZE4WFyWjzMJ6MTYIyjCXpcJNFMTaZP61JXITMkXhSkhuDkzMD/XfwR5+fr004TYcwrbNWpg1oGX5DbOgcaQ== +ember-cli-inject-live-reload@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-2.0.2.tgz#95edb543b386239d35959e5ea9579f5382976ac7" + integrity sha512-HDD6o/kBHT/kUtazklU0OW23q2jigIN42QmcpFdXUSvJ2/2SYA6yIqSUxWfJgISmtn5gTNZ2KPq1p3dLkhJxSQ== dependencies: clean-base-url "^1.0.0" - ember-cli-version-checker "^2.1.2" + ember-cli-version-checker "^3.1.3" ember-cli-is-package-missing@^1.0.0: version "1.0.0" @@ -4064,12 +4671,12 @@ ember-cli-typescript@^2.0.2: stagehand "^1.0.0" walk-sync "^1.0.0" -ember-cli-uglify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-uglify/-/ember-cli-uglify-2.1.0.tgz#4a0641fe4768d7ab7d4807aca9924cc77c544184" - integrity sha512-lDzdAUfhGx5AMBsgyR54ibENVp/LRQuHNWNaP2SDjkAXDyuYFgW0iXIAfGbxF6+nYaesJ9Tr9AKOfTPlwxZDSg== +ember-cli-uglify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-uglify/-/ember-cli-uglify-3.0.0.tgz#8819665b2cc5fe70e3ba9fe7a94645209bc42fd6" + integrity sha512-n3QxdBfAgBdb2Cnso82Kt/nxm3ppIjnYWM8uhOEhF1aYxNXfM7AJrc+yiqTCDUR61Db8aCpHfAMvChz3kyme7g== dependencies: - broccoli-uglify-sourcemap "^2.1.1" + broccoli-uglify-sourcemap "^3.1.0" lodash.defaultsdeep "^4.6.0" ember-cli-valid-component-name@^1.0.0: @@ -4079,7 +4686,7 @@ ember-cli-valid-component-name@^1.0.0: dependencies: silent-error "^1.0.0" -ember-cli-version-checker@^2.0.0, ember-cli-version-checker@^2.1.0, ember-cli-version-checker@^2.1.1, ember-cli-version-checker@^2.1.2: +ember-cli-version-checker@^2.0.0, ember-cli-version-checker@^2.1.1, 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" integrity sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg== @@ -4087,7 +4694,7 @@ ember-cli-version-checker@^2.0.0, ember-cli-version-checker@^2.1.0, ember-cli-ve resolve "^1.3.3" semver "^5.3.0" -ember-cli-version-checker@^3.1.2, ember-cli-version-checker@^3.1.3: +ember-cli-version-checker@^3.0.0, ember-cli-version-checker@^3.1.2, 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== @@ -4095,12 +4702,12 @@ ember-cli-version-checker@^3.1.2, ember-cli-version-checker@^3.1.3: resolve-package-path "^1.2.6" semver "^5.6.0" -ember-cli@~3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.13.1.tgz#8daefb108130740cd79ad7e4e1c9138fb1f7313d" - integrity sha512-CMVLpJYseyCNmN2Tp3vTmTFTXPSZlMQB7q2uoZ+ZTKMgdQ4ekeceW9mVAC4XwXm2FW+v8liowP+co/Bu1xUbPg== +ember-cli@~3.14.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.14.0.tgz#9a142da77aa8c95e0bc2c70acc67c9809e9e45cf" + integrity sha512-ZZEArSq8ynU6FbVAQnS2Nbx2yr73EgYsAngOHKOGoJwa6YEs3LFh4lHjYsxF26Bt245lH83WnehRcdlLssNF3w== dependencies: - "@babel/core" "^7.5.5" + "@babel/core" "^7.6.2" "@babel/plugin-transform-modules-amd" "^7.5.0" amd-name-resolver "^1.3.1" babel-plugin-module-resolver "^3.2.0" @@ -4145,7 +4752,7 @@ ember-cli@~3.13.1: execa "^1.0.0" exit "^0.1.2" express "^4.16.4" - filesize "^4.1.2" + filesize "^4.2.0" find-up "^4.1.0" find-yarn-workspace-root "^1.2.1" fs-extra "^8.1.0" @@ -4157,7 +4764,7 @@ ember-cli@~3.13.1: heimdalljs-fs-monitor "^0.2.3" heimdalljs-graph "^1.0.0" heimdalljs-logger "^0.1.10" - http-proxy "^1.17.0" + http-proxy "^1.18.0" inflection "^1.12.0" is-git-url "^1.0.0" isbinaryfile "^3.0.3" @@ -4165,16 +4772,16 @@ ember-cli@~3.13.1: json-stable-stringify "^1.0.1" leek "0.0.24" lodash.template "^4.5.0" - markdown-it "^9.0.1" + markdown-it "^9.1.0" markdown-it-terminal "0.1.0" minimatch "^3.0.4" morgan "^1.9.1" nopt "^3.0.6" - npm-package-arg "^6.1.0" + npm-package-arg "^6.1.1" p-defer "^3.0.0" - portfinder "^1.0.21" + portfinder "^1.0.23" promise-map-series "^0.2.3" - promise.prototype.finally "^3.1.0" + promise.prototype.finally "^3.1.1" quick-temp "^0.1.8" resolve "^1.12.0" resolve-package-path "^1.2.7" @@ -4188,7 +4795,7 @@ ember-cli@~3.13.1: testem "^2.17.0" tiny-lr "^1.1.1" tree-sync "^2.0.0" - uuid "^3.3.2" + uuid "^3.3.3" walk-sync "^2.0.2" watch-detector "^1.0.0" yam "^1.0.0" @@ -4244,12 +4851,13 @@ ember-inflector@^3.0.1: dependencies: ember-cli-babel "^6.6.0" -ember-load-initializers@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ember-load-initializers/-/ember-load-initializers-1.1.0.tgz#4edacc0f3a14d9f53d241ac3e5561804c8377978" - integrity sha512-WiciFi8IXOqjyJ65M4iBNIthqcy4uXXQq5n3WxeMMhvJVk5JNSd9hynNECNz3nqfEYuZQ9c04UWkmFIQXRfl4Q== +ember-load-initializers@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ember-load-initializers/-/ember-load-initializers-2.1.1.tgz#d1a8bead00bc44222b0ab181840869992beb30f5" + integrity sha512-Ho5sBeaZPN3HmZkYkcLrjSBF3DTNmzC5h0DizzDj8cjpnCvaqeofphJDnH41k6kLv/QHMk4pMRISPcwc+bOceQ== dependencies: - ember-cli-babel "^6.6.0" + ember-cli-babel "^7.11.0" + ember-cli-typescript "^2.0.2" ember-maybe-import-regenerator@^0.1.6: version "0.1.6" @@ -4261,20 +4869,20 @@ ember-maybe-import-regenerator@^0.1.6: ember-cli-babel "^6.0.0-beta.4" regenerator-runtime "^0.9.5" -ember-qunit@^3.4.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-3.5.3.tgz#bfd0bff8298c78c77e870cca43fe0826e78a0d09" - integrity sha512-FmXsI1bGsZ5th25x4KEle2fLCVURTptsQODfBt+Pg8tk9rX7y79cqny91PrhtkhE+giZ8p029tnq94SdpJ4ojg== +ember-qunit@^4.5.1: + version "4.6.0" + resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-4.6.0.tgz#ad79fd3ff00073a8779400cc5a4b44829517590f" + integrity sha512-i5VOGn0RP8XH+5qkYDOZshbqAvO6lHgF65D0gz8vRx4DszCIvJMJO+bbftBTfYMxp6rqG85etAA6pfNxE0DqsQ== dependencies: - "@ember/test-helpers" "^0.7.26" - broccoli-funnel "^2.0.1" - broccoli-merge-trees "^2.0.0" + "@ember/test-helpers" "^1.7.1" + broccoli-funnel "^2.0.2" + broccoli-merge-trees "^3.0.2" common-tags "^1.4.0" - ember-cli-babel "^6.8.2" + ember-cli-babel "^7.12.0" ember-cli-test-loader "^2.2.0" - qunit "~2.6.0" + qunit "^2.9.3" -ember-resolver@^5.0.1: +ember-resolver@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/ember-resolver/-/ember-resolver-5.3.0.tgz#9fbeedfa63c094b588ac7647ba62f1305374f1d8" integrity sha512-NWin+WzmsRnZxFvDlx9B3rb3kxwK0MNblJemoRvNbbxLK6z5lGxVoBfpU4/nqItWfwmpVb9ZK8bqXYs5q8HT4A== @@ -4287,7 +4895,7 @@ ember-resolver@^5.0.1: ember-cli-version-checker "^3.1.3" resolve "^1.12.0" -ember-rfc176-data@^0.3.1, ember-rfc176-data@^0.3.12, ember-rfc176-data@^0.3.5: +ember-rfc176-data@^0.3.1, ember-rfc176-data@^0.3.12: version "0.3.12" resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.12.tgz#90d82878e69e2ac9a5438e8ce14d12c6031c5bd2" integrity sha512-g9HeZj/gU5bfIIrGXkP7MhS2b3Vu5DfNUrYr14hy99TgIvtZETO+96QF4WOEUXGjIJdfTRjerVnQlqngPQSv1g== @@ -4308,7 +4916,7 @@ ember-router-generator@^2.0.0: "@babel/traverse" "^7.4.5" recast "^0.18.1" -ember-source-channel-url@^1.0.1, ember-source-channel-url@^1.1.0: +ember-source-channel-url@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/ember-source-channel-url/-/ember-source-channel-url-1.2.0.tgz#77eb9d0889e5f5370e6c70fcb2696c63ff4a34a1" integrity sha512-CLClcHzVf+8GoFk4176R16nwXoel70bd7DKVAY6D8M0m5fJJhbTrAPYpDA0lY8A60HZo9j/s8A8LWiGh1YmdZg== @@ -4322,7 +4930,7 @@ ember-source-channel-url@^2.0.1: dependencies: got "^8.0.1" -ember-source@~3.14.0: +ember-source@~3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.14.1.tgz#f11f98dffa7b169a045590203fa15c3ad2098c34" integrity sha512-UvgjF/I7jANBEjQWdxtL/luXn97ZtIL3QCsJnR7HIcwRg7JuIyz/kaT9gLOGMxWEnwu610gJ+Ic0h0dkgQqg2w== @@ -4351,6 +4959,13 @@ ember-source@~3.14.0: semver "^6.1.1" silent-error "^1.1.1" +ember-test-waiters@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ember-test-waiters/-/ember-test-waiters-1.1.1.tgz#7df6e7a47e0fdca814aa351f7f7f9a006e15fdcd" + integrity sha512-ra71ZWTGBGLeDPa308aeAg9+/nYxv2fk4OEzmXdhvbSa5Dtbei94sr5pbLXx2IiK3Re2gDAvDzxg9PVhLy9fig== + dependencies: + ember-cli-babel "^7.1.2" + ember-try-config@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ember-try-config/-/ember-try-config-3.0.0.tgz#012d8c90cae9eb624e2b62040bf7e76a1aa58edc" @@ -4387,12 +5002,22 @@ emit-function@0.0.2: resolved "https://registry.yarnpkg.com/emit-function/-/emit-function-0.0.2.tgz#e3a50b3d61be1bf8ca88b924bf713157a5bec124" integrity sha1-46ULPWG+G/jKiLkkv3ExV6W+wSQ= +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -4439,6 +5064,15 @@ engine.io@~3.4.0: engine.io-parser "~2.2.0" ws "^7.1.2" +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.0.2, ensure-posix-path@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce" @@ -4449,6 +5083,13 @@ entities@^1.1.2, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + error@^7.0.0: version "7.2.0" resolved "https://registry.yarnpkg.com/error/-/error-7.2.0.tgz#80c989885635b41df9309d145834a4f125ae2245" @@ -4517,38 +5158,51 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-plugin-ember@^5.2.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-5.4.0.tgz#2980a4389119b37d0450fff8e82d59c9aab126d0" - integrity sha512-tYMuxUrTad4f7Dq9gY9GUs9lXwKY+fZklzCJ0JoYbzK2PwSfdrPInr2Y4tHornc9dzPvNbRxsn5b26PrWp2iZg== +escodegen@^1.11.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" + integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== dependencies: - ember-rfc176-data "^0.3.5" + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-plugin-ember@^7.1.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-7.5.0.tgz#4085c4a70d5f3ef9aa44c1736f966f5f6fb9653b" + integrity sha512-dWXLKFHUkXTDU/Zd/JNQ1OrbovwoXSipfReCAdIm2tbG+zaheE7LjisHzxuPg/Q8mktAaVu6l9CM4FI0+mE0IQ== + dependencies: + "@ember-data/rfc395-data" "^0.0.4" + ember-rfc176-data "^0.3.12" snake-case "^2.1.0" -eslint-plugin-es@^1.3.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998" - integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA== +eslint-plugin-es@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" + integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== dependencies: eslint-utils "^1.4.2" - regexpp "^2.0.1" + regexpp "^3.0.0" -eslint-plugin-node@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz#a6e054e50199b2edd85518b89b4e7b323c9f36db" - integrity sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw== +eslint-plugin-node@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" + integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== dependencies: - eslint-plugin-es "^1.3.1" - eslint-utils "^1.3.1" - ignore "^4.0.2" + eslint-plugin-es "^2.0.0" + eslint-utils "^1.4.2" + ignore "^5.1.1" minimatch "^3.0.4" - resolve "^1.8.1" - semver "^5.5.0" + resolve "^1.10.1" + semver "^6.1.0" -eslint-scope@^3.7.1: - version "3.7.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" - integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== +eslint-scope@^4.0.0, eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -4565,62 +5219,66 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^4.0.0: - version "4.19.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" - integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== +eslint@^5.6.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" esutils "^2.0.2" - file-entry-cache "^2.0.0" + file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" + inquirer "^6.2.2" + js-yaml "^3.13.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" + lodash "^4.17.11" + minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" - pluralize "^7.0.0" progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" + regexpp "^2.0.1" + semver "^5.5.1" strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" esm@^3.2.25, esm@^3.2.4: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -espree@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +esprima@^3.1.3, esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" @@ -4632,12 +5290,7 @@ esprima@~3.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" integrity sha1-U88kes2ncxPlUcOqLnM0LT+099k= -esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esquery@^1.0.0: +esquery@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== @@ -4651,7 +5304,7 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -4681,12 +5334,18 @@ events-to-array@^1.0.1: resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" integrity sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y= -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: - merge "^1.2.0" + md5.js "^1.3.4" + safe-buffer "^5.1.1" exec-sh@^0.3.2: version "0.3.2" @@ -4719,11 +5378,6 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exists-stat@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/exists-stat/-/exists-stat-1.0.0.tgz#0660e3525a2e89d9e446129440c272edfa24b529" - integrity sha1-BmDjUlouidnkRhKUQMJy7foktSk= - exists-sync@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.0.4.tgz#9744c2c428cc03b01060db454d4b12f0ef3c8879" @@ -4815,15 +5469,6 @@ extend@^3.0.0, extend@~3.0.0, extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -4857,11 +5502,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -4872,7 +5512,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.4: +fast-levenshtein@~2.0.4, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -4912,6 +5552,11 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -4919,15 +5564,14 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" + flat-cache "^2.0.1" -filesize@^4.1.2: +filesize@^4.1.2, filesize@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.2.1.tgz#ab1cb2069db5d415911c1a13e144c0e743bc89bc" integrity sha512-bP82Hi8VRZX/TUBKfE24iiUGsB/sfm2WUrwTQyAzQrhO3V9IhcBBNBXMyzLY5orACxRyYJ3d2HeRVX+eFv4lmA== @@ -4963,6 +5607,15 @@ find-babel-config@^1.1.0: json5 "^0.5.1" path-exists "^3.0.0" +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + find-index@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/find-index/-/find-index-1.1.1.tgz#4b221f8d46b7f8bea33d8faed953f3ca7a081cbc" @@ -4975,6 +5628,13 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -4991,7 +5651,7 @@ find-yarn-workspace-root@^1.1.0, find-yarn-workspace-root@^1.2.1: fs-extra "^4.0.3" micromatch "^3.1.4" -findup-sync@2.0.0, findup-sync@^2.0.0: +findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= @@ -5012,15 +5672,27 @@ fireworm@^0.7.0: lodash.flatten "^3.0.2" minimatch "^3.0.2" -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" follow-redirects@^1.0.0: version "1.9.0" @@ -5074,7 +5746,7 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.1: +from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= @@ -5115,7 +5787,16 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.0: +fs-extra@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" + integrity sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -5150,6 +5831,16 @@ fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.4, fs-tree-diff@^0.5 path-posix "^1.0.0" symlink-or-copy "^1.1.8" +fs-tree-diff@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-1.0.2.tgz#0e2931733a85b55feb3472c0b89a20b0c03ac0de" + integrity sha512-Zro2ACaPVDgVOx9+s5s5AfPlAD0kMJdbwGvTGF6KC1SjxjiGWxJvV4mUTDkFVSy3OUw2C/f1qpdjF81hGqSBAw== + dependencies: + heimdalljs-logger "^0.1.7" + object-assign "^4.1.0" + path-posix "^1.0.0" + symlink-or-copy "^1.1.8" + fs-tree-diff@^2.0.0, fs-tree-diff@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz#343e4745ab435ec39ebac5f9059ad919cd034afa" @@ -5181,7 +5872,7 @@ fs-vacuum@~1.2.7: path-is-inside "^1.0.1" rimraf "^2.5.2" -fs-write-stream-atomic@~1.0.8: +fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= @@ -5196,7 +5887,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.3, fsevents@^1.2.7: +fsevents@^1.2.7: version "1.2.9" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== @@ -5412,6 +6103,18 @@ glob@^7.0.4, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.5: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@~6.0.3: version "6.0.4" resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" @@ -5443,7 +6146,7 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -globals@^11.0.1, globals@^11.1.0: +globals@^11.1.0, globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -5498,7 +6201,7 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== -graceful-fs@^4.2.0: +graceful-fs@^4.1.15, graceful-fs@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -5529,6 +6232,17 @@ handlebars@^4.0.11, handlebars@^4.0.4: optionalDependencies: uglify-js "^3.1.4" +handlebars@^4.3.1: + version "4.5.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.2.tgz#5a4eb92ab5962ca3415ac188c86dc7f784f76a0f" + integrity sha512-29Zxv/cynYB7mkT1rVWQnV7mGX6v7H/miQ6dbEpYTKq5eJBN7PsRB+ViYJlcT6JINTSu4dVB9kOqEun78h6Exg== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -5643,6 +6357,14 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + hash-for-dep@^1.0.2, hash-for-dep@^1.2.3, hash-for-dep@^1.4.7, hash-for-dep@^1.5.0, hash-for-dep@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/hash-for-dep/-/hash-for-dep-1.5.1.tgz#497754b39bee2f1c4ade4521bfd2af0a7c1196e3" @@ -5655,6 +6377,14 @@ hash-for-dep@^1.0.2, hash-for-dep@^1.2.3, hash-for-dep@^1.4.7, hash-for-dep@^1.5 resolve "^1.10.0" resolve-package-path "^1.0.11" +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + hawk@~3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -5700,6 +6430,15 @@ heimdalljs@^0.3.0: dependencies: rsvp "~3.2.1" +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" @@ -5730,6 +6469,13 @@ hosted-git-info@~2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" integrity sha1-C6gdkNouJas0ozLm7HeTbhWYEYs= +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -5772,7 +6518,7 @@ http-errors@~1.7.2: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= -http-proxy@^1.13.1, http-proxy@^1.17.0: +http-proxy@^1.13.1, http-proxy@^1.18.0: version "1.18.0" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== @@ -5799,18 +6545,28 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + https@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" integrity sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q= -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + iferr@^0.1.5, iferr@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" @@ -5823,16 +6579,24 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^3.3.3: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.2: +ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -5843,6 +6607,11 @@ indexof@0.0.1: resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflection@1.12.0, inflection@^1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" @@ -5861,6 +6630,11 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -5896,27 +6670,7 @@ inline-source-map-comment@^1.0.5: sum-up "^1.0.1" xtend "^4.0.0" -inquirer@^3.0.6, inquirer@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -inquirer@^6: +inquirer@^6, inquirer@^6.2.2, inquirer@^6.5.1: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== @@ -6152,11 +6906,6 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" @@ -6201,7 +6950,7 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -6272,6 +7021,11 @@ js-reporters@1.2.1: resolved "https://registry.yarnpkg.com/js-reporters/-/js-reporters-1.2.1.tgz#f88c608e324a3373a95bcc45ad305e5c979c459b" integrity sha1-+IxgjjJKM3OpW8xFrTBeXJecRZs= +js-string-escape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6282,7 +7036,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.1, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.9.1: +js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.2.5, js-yaml@^3.2.7: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -6295,6 +7049,37 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdom@^12.0.0: + version "12.2.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-12.2.0.tgz#7cf3f5b5eafd47f8f09ca52315d367ff6e95de23" + integrity sha512-QPOggIJ8fquWPLaYYMoh+zqUmdphDtu1ju0QGTitZT1Yd8I5qenPpXM1etzUegu3MjVp8XPzgZxdn8Yj7e40ig== + dependencies: + abab "^2.0.0" + acorn "^6.0.2" + acorn-globals "^4.3.0" + array-equal "^1.0.0" + cssom "^0.3.4" + cssstyle "^1.1.1" + data-urls "^1.0.1" + domexception "^1.0.1" + escodegen "^1.11.0" + html-encoding-sniffer "^1.0.2" + nwsapi "^2.0.9" + parse5 "5.1.0" + pn "^1.1.0" + request "^2.88.0" + request-promise-native "^1.0.5" + saxes "^3.1.3" + symbol-tree "^3.2.2" + tough-cookie "^2.4.3" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + ws "^6.1.0" + xml-name-validator "^3.0.0" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -6320,16 +7105,11 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= -json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -6362,6 +7142,13 @@ json5@^0.5.1: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + json5@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" @@ -6470,6 +7257,20 @@ livereload-js@^2.3.0: resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + loader.js@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.7.0.tgz#a1a52902001c83631efde9688b8ab3799325ef1f" @@ -6483,6 +7284,14 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -6667,7 +7476,7 @@ lodash.debounce@^3.1.1: dependencies: lodash._getnative "^3.0.0" -lodash.defaultsdeep@^4.6.0: +lodash.defaultsdeep@^4.6.0, 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== @@ -6751,6 +7560,11 @@ lodash.restparam@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -6804,7 +7618,7 @@ lodash.without@~3.2.1: lodash._basedifference "^3.0.0" lodash.restparam "^3.0.0" -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.6.1: +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.6.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -6851,11 +7665,26 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + make-array@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/make-array/-/make-array-0.1.2.tgz#335e36ebb0c5a43154d21213a1ecaeae2a1bb3ef" integrity sha1-M14267DFpDFU0hIToeyuriobs+8= +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + make-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" @@ -6904,7 +7733,7 @@ markdown-it@^8.3.1: mdurl "^1.0.1" uc.micro "^1.0.5" -markdown-it@^9.0.1: +markdown-it@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-9.1.0.tgz#df9601c168568704d554b1fff9af0c5b561168d9" integrity sha512-xHKG4C8iPriyfu/jc2hsCC045fKrMQ0VexX2F1FGYiRxDxqMB2aAhF8WauJ3fltn2kb90moGBkiiEdooGIg55w== @@ -6915,7 +7744,7 @@ markdown-it@^9.0.1: mdurl "^1.0.1" uc.micro "^1.0.5" -matcher-collection@^1.0.0, matcher-collection@^1.0.5, matcher-collection@^1.1.1: +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" integrity sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g== @@ -6942,6 +7771,15 @@ md5-o-matic@^0.1.1: resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" integrity sha1-givM1l4RfFFPqxdrJZRdVBAKA8M= +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -6952,6 +7790,22 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + memory-streams@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/memory-streams/-/memory-streams-0.1.3.tgz#d9b0017b4b87f1d92f55f2745c9caacb1dc93ceb" @@ -6994,7 +7848,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -7013,6 +7867,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@1.40.0: version "1.40.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" @@ -7045,6 +7907,16 @@ mimic-response@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + minimatch@1: version "1.0.0" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-1.0.0.tgz#e0dd2120b49e1b724ce8d714c520822a9438576d" @@ -7053,7 +7925,7 @@ minimatch@1: lru-cache "2" sigmund "~1.0.0" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@3.0.4, 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== @@ -7097,6 +7969,22 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -7145,6 +8033,18 @@ mout@^1.0.0: resolved "https://registry.yarnpkg.com/mout/-/mout-1.1.0.tgz#0b29d41e6a80fa9e2d4a5be9d602e1d9d02177f6" integrity sha512-XsP0vf4As6BfqglxZqbqQ8SR6KQot2AgxvR0gG+WtUkf90vUXchMOZQtPf/Hml1rEffJupqL/tIrU6EYhsUQjw== +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -7216,7 +8116,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.6.0: +neo-async@^2.5.0, neo-async@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== @@ -7263,6 +8163,35 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + node-modules-path@^1.0.0, node-modules-path@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/node-modules-path/-/node-modules-path-1.0.2.tgz#e3acede9b7baf4bc336e3496b58e5b40d517056e" @@ -7307,6 +8236,11 @@ node-uuid@~1.4.7: resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" integrity sha1-sEDrCSOWivq/jTL7HxfxFn/auQc= +node-watch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.6.1.tgz#b9874111ce9f5841b1c7596120206c7b825be0e9" + integrity sha512-gwQiR7weFRV8mAtT0x0kXkZ18dfRLB45xH7q0hCOVQMLfLb2f1ZaSvR57q4/b/Vj6B0RwMNJYbvb69e1yM7qEA== + "nopt@2 || 3", nopt@^3.0.3, nopt@^3.0.6, nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -7409,7 +8343,7 @@ npm-install-checks@~2.0.1: semver "^5.1.0" validate-npm-package-name "^3.0.0" -npm-package-arg@^6.1.0: +npm-package-arg@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== @@ -7575,6 +8509,11 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= +nwsapi@^2.0.9: + version "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.8.0: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -7585,7 +8524,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@4.1.1, object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@4.1.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" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -7697,6 +8636,18 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" @@ -7721,6 +8672,11 @@ ora@^3.4.0: strip-ansi "^5.2.0" wcwidth "^1.0.1" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -7766,7 +8722,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.2.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== @@ -7780,6 +8736,13 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -7814,11 +8777,49 @@ package-json@^4.0.1: registry-url "^3.0.3" semver "^5.1.0" +pako@~1.0.5: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" @@ -7850,6 +8851,11 @@ path-array@^1.0.0: dependencies: array-index "^1.0.0" +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -7880,7 +8886,7 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5, path-parse@^1.0.6: +path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -7907,6 +8913,17 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -7917,6 +8934,11 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -7929,6 +8951,13 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" @@ -7936,12 +8965,12 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -portfinder@^1.0.21: +portfinder@^1.0.23: version "1.0.25" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== @@ -7997,11 +9026,21 @@ process-relative-require@^1.0.0: dependencies: node-modules-path "^1.0.0" +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + promise-map-series@^0.2.1, promise-map-series@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/promise-map-series/-/promise-map-series-0.2.3.tgz#c2d377afc93253f6bd03dbb77755eb88ab20a847" @@ -8009,7 +9048,7 @@ promise-map-series@^0.2.1, promise-map-series@^0.2.3: dependencies: rsvp "^3.0.14" -promise.prototype.finally@^3.1.0: +promise.prototype.finally@^3.1.0, promise.prototype.finally@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.1.tgz#cb279d3a5020ca6403b3d92357f8e22d50ed92aa" integrity sha512-gnt8tThx0heJoI3Ms8a/JdkYBVhYP/wv+T7yQimR+kdOEJL21xTFbiJhMRqnSPcr54UVvMbsscDk2w+ivyaLPw== @@ -8038,16 +9077,41 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.0" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.24: +psl@^1.1.24, psl@^1.1.28: version "1.4.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -8056,12 +9120,26 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^1.4.1: +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -8095,6 +9173,16 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + quick-temp@^0.1.2, quick-temp@^0.1.3, quick-temp@^0.1.5, quick-temp@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/quick-temp/-/quick-temp-0.1.8.tgz#bab02a242ab8fb0dd758a3c9776b32f9a5d94408" @@ -8104,18 +9192,31 @@ quick-temp@^0.1.2, quick-temp@^0.1.3, quick-temp@^0.1.5, quick-temp@^0.1.8: rimraf "^2.5.4" underscore.string "~3.3.4" -qunit@~2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/qunit/-/qunit-2.6.2.tgz#551210c5cf857258a4fe39a7fe15d9e14dfef22c" - integrity sha512-PHbKulmd4rrDhFto7iHicIstDTX7oMRvAcI7loHstvU8J7AOGwzcchONmy+EG4KU8HDk0K90o7vO0GhlYyKlOg== +qunit@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/qunit/-/qunit-2.9.3.tgz#9522a088e76f0782f70a45db92f2fd14db311bcc" + integrity sha512-RH4VYSaVsNRDthMFFboTJAJ8q4kJM5LvOqWponKUYPEAeOcmc/YFV1QsZ7ikknA3TjqliWFJYEV63vvVXaALmQ== dependencies: commander "2.12.2" - exists-stat "1.0.0" - findup-sync "2.0.0" js-reporters "1.2.1" - resolve "1.5.0" - sane "^2.5.2" - walk-sync "0.3.2" + minimatch "3.0.4" + node-watch "0.6.1" + resolve "1.9.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" range-parser@~1.2.1: version "1.2.1" @@ -8213,7 +9314,7 @@ read@1, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2: +"readable-stream@1 || 2", readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -8367,16 +9468,16 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpp@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== - regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" + integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -8467,7 +9568,23 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@2, request@^2.47.0: +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== + dependencies: + lodash "^4.17.15" + +request-promise-native@^1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== + dependencies: + request-promise-core "1.1.3" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@2, request@^2.47.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -8524,14 +9641,6 @@ require-dir@^0.3.0: resolved "https://registry.yarnpkg.com/require-dir/-/require-dir-0.3.2.tgz#c1d5c75e9fbffde9f2e6b33e383db4f594b5a6a9" integrity sha1-wdXHXp+//eny5rM+OD209ZS1pqk= -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -8550,12 +9659,12 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-package-path@^1.0.11, resolve-package-path@^1.2.6, resolve-package-path@^1.2.7: +resolve-package-path@^1.0.11, resolve-package-path@^1.2.2, resolve-package-path@^1.2.6, resolve-package-path@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.7.tgz#2a7bc37ad96865e239330e3102c31322847e652e" integrity sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q== @@ -8576,14 +9685,14 @@ 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.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" - integrity sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw== +resolve@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" + integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ== dependencies: - path-parse "^1.0.5" + path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.7.1, resolve@^1.8.1: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== @@ -8622,6 +9731,13 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2. dependencies: glob "^7.1.3" +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== + dependencies: + glob "^7.1.3" + rimraf@~2.5.0: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" @@ -8629,12 +9745,13 @@ rimraf@~2.5.0: dependencies: glob "^7.0.5" -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== +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: - glob "^7.1.3" + hash-base "^3.0.0" + inherits "^2.0.1" rollup-pluginutils@^2.8.1: version "2.8.2" @@ -8652,7 +9769,7 @@ rollup@^1.12.0: "@types/node" "*" acorn "^7.1.0" -rsvp@^3.0.14, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0, rsvp@^3.3.3: +rsvp@^3.0.14, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0: version "3.6.2" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== @@ -8674,17 +9791,12 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + aproba "^1.1.1" rxjs@^6.4.0: version "6.5.3" @@ -8698,7 +9810,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -8720,22 +9832,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o= - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.2.3" - sane@^4.0.0, sane@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" @@ -8756,6 +9852,30 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^3.1.3: + version "3.1.11" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" + +schema-utils@^0.4.4: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + "semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -8766,7 +9886,7 @@ semver@^4.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto= -semver@^6.0.0, semver@^6.1.1, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -8795,6 +9915,11 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +serialize-javascript@^1.7.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" + integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -8820,6 +9945,11 @@ 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: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -8830,6 +9960,14 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + sha@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz#6030822fbd2c9823949f8f72ed6411ee5cf25aae" @@ -8877,11 +10015,13 @@ slash@^1.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" slide@^1.1.3, slide@^1.1.5, slide@~1.1.3, slide@~1.1.6: @@ -9013,6 +10153,11 @@ sorted-object@~1.0.0: resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-1.0.0.tgz#5d1f4f9c1fb2cd48965967304e212eb44cfb6d05" integrity sha1-XR9PnB+yzUiWWWcwTiEutEz7bQU= +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" @@ -9031,10 +10176,10 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@~0.5.10: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== +source-map-support@~0.5.12: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -9156,6 +10301,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + stagehand@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stagehand/-/stagehand-1.0.0.tgz#79515e2ad3a02c63f8720c7df9b6077ae14276d9" @@ -9176,6 +10328,43 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -9203,6 +10392,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string.prototype.trimleft@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" @@ -9224,7 +10422,7 @@ string_decoder@0.10, string_decoder@~0.10.x: resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= -string_decoder@^1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -9264,6 +10462,11 @@ strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" @@ -9274,7 +10477,7 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@~2.0.1: +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -9303,6 +10506,11 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8, symlink-or-copy@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#5d49108e2ab824a34069b68974486c290020b393" @@ -9319,17 +10527,15 @@ sync-disk-cache@^1.3.3: rimraf "^2.2.8" username-sync "^1.0.2" -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" tap-parser@^7.0.0: version "7.0.0" @@ -9340,6 +10546,11 @@ tap-parser@^7.0.0: js-yaml "^3.2.7" minipass "^2.2.0" +tapable@^1.0.0, tapable@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + tar@^2.0.0, tar@~2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" @@ -9369,14 +10580,29 @@ temp@0.9.0: dependencies: rimraf "~2.6.2" -terser@^3.7.5: - version "3.17.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" - integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== +terser-webpack-plugin@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" + integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^1.7.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2, terser@^4.3.9: + version "4.4.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.0.tgz#22c46b4817cf4c9565434bfe6ad47336af259ac3" + integrity sha512-oDG16n2WKm27JO8h4y/w3iqBGAOSCtq7k8dRmrn4Wf9NouL0b2WpMHGChFGZq4nFAQy1FsNJrVQHfurXOSTmOA== dependencies: - commander "^2.19.0" + commander "^2.20.0" source-map "~0.6.1" - source-map-support "~0.5.10" + source-map-support "~0.5.12" testem@^2.17.0: version "2.17.0" @@ -9413,7 +10639,7 @@ testem@^2.17.0: tmp "0.0.33" xmldom "^0.1.19" -text-table@~0.2.0: +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -9423,6 +10649,14 @@ text-table@~0.2.0: resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.5.0.tgz#e21d3831dafa37513dd80666dff541414e314293" integrity sha512-1IkVr355eHcomgK7fgj1Xsokturx6L5S2JRT5WcRdA6v5shk9sxWuO/w/VbpQexwkXJMQIa/j1dBi3oo7+HhcA== +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + through2@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" @@ -9445,6 +10679,13 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + tiny-lr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" @@ -9488,6 +10729,11 @@ to-array@0.1.4: resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -9533,6 +10779,14 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +tough-cookie@^2.3.3, tough-cookie@^2.4.3: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tough-cookie@~2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.2.2.tgz#c83a1830f4e5ef0b93ef2a3488e724f8de016ac7" @@ -9546,6 +10800,13 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + tree-sync@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.4.0.tgz#314598d13abaf752547d9335b8f95d9a137100d6" @@ -9578,6 +10839,11 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +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.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -9627,6 +10893,13 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript-memoize@^1.0.0-alpha.3: + version "1.0.0-alpha.3" + resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.0.0-alpha.3.tgz#699a5415f886694a8d6e2e5451bc28a39a6bc2f9" + integrity sha1-aZpUFfiGaUqNbi5UUbwoo5prwvk= + dependencies: + core-js "2.4.1" + typescript@^3.6.4: version "3.6.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.4.tgz#b18752bb3792bc1a0281335f7f6ebf1bbfc5b91d" @@ -9701,7 +10974,7 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -unique-filename@~1.1.0: +unique-filename@^1.1.1, unique-filename@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== @@ -9788,6 +11061,14 @@ url-to-options@^1.0.1: resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -9816,12 +11097,26 @@ util.promisify@^1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.3.2: +uuid@^3.3.2, uuid@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== @@ -9862,13 +11157,17 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -walk-sync@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.3.2.tgz#4827280afc42d0e035367c4a4e31eeac0d136f75" - integrity sha512-FMB5VqpLqOCcqrzA9okZFc0wq0Qbmdm396qJxvQZhDpyu0W95G9JCmp74tx7iyYnyOcBtUuKJsgIKAqjozvmmQ== +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= dependencies: - ensure-posix-path "^1.0.0" - matcher-collection "^1.0.0" + browser-process-hrtime "^0.1.2" walk-sync@^0.2.5: version "0.2.7" @@ -9932,13 +11231,14 @@ watch-detector@^1.0.0: silent-error "^1.1.1" tmp "^0.1.0" -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" @@ -9947,6 +11247,49 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webpack-sources@^1.3.0, webpack-sources@^1.4.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@~4.28: + version "4.28.4" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.28.4.tgz#1ddae6c89887d7efb752adf0c3cd32b9b07eacd0" + integrity sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-module-context" "1.7.11" + "@webassemblyjs/wasm-edit" "1.7.11" + "@webassemblyjs/wasm-parser" "1.7.11" + acorn "^5.6.2" + acorn-dynamic-import "^3.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^0.4.4" + tapable "^1.1.0" + terser-webpack-plugin "^1.1.0" + watchpack "^1.5.0" + webpack-sources "^1.3.0" + websocket-driver@>=0.5.1: version "0.7.3" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" @@ -9961,6 +11304,27 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.2.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-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + which@1, which@^1.2.14, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -9982,6 +11346,11 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -9992,6 +11361,13 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + workerpool@^2.3.0: version "2.3.3" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-2.3.3.tgz#49a70089bd55e890d68cc836a19419451d7c81d7" @@ -10008,6 +11384,11 @@ workerpool@^3.1.1: object-assign "4.1.1" rsvp "^4.8.4" +workerpool@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-5.0.2.tgz#8fd8f6c7250710b9c3143d5f7494db3b6633ce6e" + integrity sha512-RsXfHGFzbqrfrExTN1TyZobWXCN6+vbn9B1CsZ5zQ2ASA2kQaYONCGOAT88Ew+kNSaRq/XmApRC/HRSv9Z98Ng== + wrappy@1, wrappy@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -10032,13 +11413,20 @@ write-file-atomic@~1.1.4: imurmurhash "^0.1.4" slide "^1.1.5" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: mkdirp "^0.5.1" +ws@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + ws@^7.1.2: version "7.2.0" resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.0.tgz#422eda8c02a4b5dba7744ba66eebbd84bcef0ec7" @@ -10058,6 +11446,16 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xml-name-validator@^3.0.0: + version "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== + +xmlchars@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xmldom@^0.1.19: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" @@ -10068,17 +11466,22 @@ xmlhttprequest-ssl@~1.5.4: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= -xtend@^4.0.0: +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== +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From 786f95a6ede6d0ad116b0056f68529b909e573af Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 16 Nov 2019 10:03:53 -0800 Subject: [PATCH 19/75] remove uneeded property --- addon/-private/validated-changeset.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 967eca4a..75f2f8ad 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -205,15 +205,6 @@ export class BufferedChangeset implements IChangeset { return !this.isPristine; } - /** - * Proxies `get` to the underlying content or changed value, if present. - */ - unknownProperty( - key: string - ): any { - return this._valueFor(key); - } - /** * Stores change on the changeset. * From 0d93f8ee1804e241bd0a5385cfc2dcff15421caa Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 16 Nov 2019 12:03:09 -0800 Subject: [PATCH 20/75] minor fixes --- addon/-private/set-deep.ts | 3 ++- addon/utils/inflate.ts | 1 + addon/utils/set-nested-property.ts | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/addon/-private/set-deep.ts b/addon/-private/set-deep.ts index b587346c..8cb16a3f 100644 --- a/addon/-private/set-deep.ts +++ b/addon/-private/set-deep.ts @@ -1,5 +1,6 @@ export default function setDeep(target: any, path: string, value: unknown) { const keys = split(path).filter(isValidKey); + let orig = target; if (keys.length === 1) { result(target, keys[0], value); @@ -21,7 +22,7 @@ export default function setDeep(target: any, path: string, value: unknown) { target = target[prop]; } - return target; + return orig; } function result(target: any, path: string, value: unknown) { diff --git a/addon/utils/inflate.ts b/addon/utils/inflate.ts index fb78d4c3..41b2b036 100644 --- a/addon/utils/inflate.ts +++ b/addon/utils/inflate.ts @@ -27,6 +27,7 @@ export default function inflate( let result = keys(obj) .sort() .reduce((inflatedObj, key) => { + // set-deep will convert nested string key to single key per level setDeep(inflatedObj, key, transform(obj[key])); return inflatedObj; }, {}); diff --git a/addon/utils/set-nested-property.ts b/addon/utils/set-nested-property.ts index e3804268..e098dc42 100644 --- a/addon/utils/set-nested-property.ts +++ b/addon/utils/set-nested-property.ts @@ -3,7 +3,7 @@ import { assert, runInDebug } from '@ember/debug'; const { keys } = Object; /** - * Set a property on an `obj`. + * Set a property on an `obj` with keys flattened to string. * * This function deletes every key prefixed by `key` in `obj`, as well * as every key in the path leading up to `key`. Keeps keys that don't match. From 1d1f1d7fec04363ec6f106c8ee6fc70ea8309714 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 16 Nov 2019 22:57:35 -0800 Subject: [PATCH 21/75] lets start working with single key level maps --- addon/-private/get-deep.ts | 1 + addon/-private/normalize-object.ts | 27 +++++++++ addon/-private/set-deep.ts | 13 ++++- addon/-private/validated-changeset.ts | 57 +++++++++++++++---- addon/utils/set-nested-property.ts | 28 +++++---- .../integration/components/changeset-test.js | 35 ++++++------ 6 files changed, 117 insertions(+), 44 deletions(-) create mode 100644 addon/-private/normalize-object.ts diff --git a/addon/-private/get-deep.ts b/addon/-private/get-deep.ts index 9b8c6c5e..3ff88ad2 100644 --- a/addon/-private/get-deep.ts +++ b/addon/-private/get-deep.ts @@ -11,6 +11,7 @@ export default function getDeep(root: T, path: string | string return undefined; } + // next iteration has next level obj = obj[parts[i]]; } diff --git a/addon/-private/normalize-object.ts b/addon/-private/normalize-object.ts new file mode 100644 index 00000000..f3194672 --- /dev/null +++ b/addon/-private/normalize-object.ts @@ -0,0 +1,27 @@ +import isObject from '../utils/is-object'; + +/** + * traverse through target and unset `value` from leaf key + * + * @method normalizeObject + * @param target + */ +export default function normalizeObject(target: T): T { + let obj = JSON.parse(JSON.stringify(target)); + + for (let key in obj) { + if (obj[key] && isObject(obj[key])) { + if (Object.prototype.hasOwnProperty.apply(obj[key], ['value'])) { + obj[key] = obj[key].value; + } else { + normalizeObject(obj[key]); + } + } + + if (key === 'value') { + return obj[key]; + } + } + + return obj; +} diff --git a/addon/-private/set-deep.ts b/addon/-private/set-deep.ts index 8cb16a3f..052aa913 100644 --- a/addon/-private/set-deep.ts +++ b/addon/-private/set-deep.ts @@ -1,4 +1,13 @@ -export default function setDeep(target: any, path: string, value: unknown) { +/** + * TODO: consider + * https://github.com/emberjs/ember.js/blob/822452c4432620fc67a777aba3b150098fd6812d/packages/%40ember/-internals/metal/lib/property_set.ts + * + * @method setDeep + * @param target + * @param path + * @param value + */ +export default function setDeep(target: any, path: string, value: unknown): any { const keys = split(path).filter(isValidKey); let orig = target; @@ -14,11 +23,13 @@ export default function setDeep(target: any, path: string, value: unknown) { target[prop] = {}; } + // last iteration if (i === keys.length - 1) { result(target, prop, value); break; } + // assign next level of object for next loop target = target[prop]; } diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 75f2f8ad..048d4af8 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -6,6 +6,7 @@ import { import Change from 'ember-changeset/-private/change'; import { notifierForEvent } from 'ember-changeset/-private/evented'; import Err from 'ember-changeset/-private/err'; +import normalizeObject from 'ember-changeset/-private/normalize-object'; import pureAssign from 'ember-changeset/utils/assign'; import inflate from 'ember-changeset/utils/inflate'; import isChangeset, { CHANGESET } from 'ember-changeset/utils/is-changeset'; @@ -154,6 +155,8 @@ export class BufferedChangeset implements IChangeset { }); } + // TODO: iterate and find all leaf errors + // can only provide leaf key get errors() { let obj = this[ERRORS]; @@ -182,10 +185,7 @@ export class BufferedChangeset implements IChangeset { get error() { let obj: Errors = this[ERRORS]; - function transform(e: Err) { - return { value: e.value, validation: e.validation }; - } - return inflate(obj, transform); + return obj; } get data() { @@ -823,8 +823,29 @@ export class BufferedChangeset implements IChangeset { key = '' ): InternalMap { let obj = this[objName] as InternalMap; - if (obj.hasOwnProperty(key)) { + let keys = key.split('.'); + + if (keys.length === 1 && obj.hasOwnProperty(key)) { delete obj[key]; + } else if (obj[keys[0]]) { + let [base, ...remaining] = keys; + let previousNode: { [key: string]: any } = obj; + let currentNode: any = obj[base]; + let currentKey: string | undefined = base; + + // find leaf and delete from map + while (isObject(currentNode) && currentKey) { + let curr: { [key: string]: unknown } = currentNode + if (curr.value || curr.validation) { + delete previousNode[currentKey]; + } + + currentKey = remaining.shift(); + previousNode = currentNode; + if (currentKey) { + currentNode = currentNode[currentKey]; + } + } } return obj; @@ -834,7 +855,12 @@ export class BufferedChangeset implements IChangeset { // 'person' if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { let changes: Changes = this[CHANGES]; - return changes[key].value; + let result: Change = changes[key]; + if (isObject(result)) { + return normalizeObject(result); + } + + return result.value; } // 'person.username' @@ -842,17 +868,24 @@ export class BufferedChangeset implements IChangeset { if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [baseKey])) { let changes: Changes = this[CHANGES]; let c: Change = changes[baseKey]; - return this.getDeep(c.value, remaining.join('.')); + let result = this.getDeep(normalizeObject(c), remaining.join('.')); + // just b/c top level key exists doesn't mean it has the nested key we are looking for + if (result) { + return result; + } + } + + // finally return on underlying object + let content: Content = this[CONTENT]; + const result = this.getDeep(content, key); + if (result) { + return result; } // return getters/setters/methods on BufferedProxy instance if (this[key]) { return this[key]; } - - // finally return on underlying object - let content: Content = this[CONTENT]; - return this.getDeep(content, key); } set ( @@ -864,7 +897,7 @@ export class BufferedChangeset implements IChangeset { return; } - return this.setUnknownProperty(key, value); + this.setUnknownProperty(key, value); } } diff --git a/addon/utils/set-nested-property.ts b/addon/utils/set-nested-property.ts index e098dc42..17569be3 100644 --- a/addon/utils/set-nested-property.ts +++ b/addon/utils/set-nested-property.ts @@ -1,9 +1,10 @@ import { assert, runInDebug } from '@ember/debug'; +import setDeep from '../-private/set-deep'; const { keys } = Object; /** - * Set a property on an `obj` with keys flattened to string. + * Set a property on an `obj` with keys * * This function deletes every key prefixed by `key` in `obj`, as well * as every key in the path leading up to `key`. Keeps keys that don't match. @@ -32,18 +33,21 @@ export default function setNestedProperty( }); }); - // Delete keys prefixed by `key`. - objKeys - .filter(k => k.indexOf(`${key}.`) === 0) - .forEach(k => delete obj[k]); + // // Delete keys prefixed by `key`. + // objKeys + // .filter(k => k.indexOf(`${key}.`) === 0) + // .forEach(k => delete obj[k]); - // Delete keys in path leading up to `key`. - key.split('.').slice(0, -1).forEach((_, i, allParts) => { - let key = allParts.slice(0, i + 1).join('.'); - delete obj[key]; - }); + // Delete keys in path leading up to leaf key + // TODO: is this necessary? + if (key.split('.').length > 1) { + key.split('.').slice(-1).forEach(_ => { + delete obj[key]; + }); + } // Set value and return. - obj[key] = value; - return obj; + // obj[key] = value; + // return obj; + return setDeep(obj, key, value); } diff --git a/tests/integration/components/changeset-test.js b/tests/integration/components/changeset-test.js index 00dedbdb..6304719b 100644 --- a/tests/integration/components/changeset-test.js +++ b/tests/integration/components/changeset-test.js @@ -254,25 +254,26 @@ module('Integration | Helper | changeset', function(hooks) {

{{changeset.person.firstName}} {{changeset.person.lastName}}

> - {{input id="last-name" value=changeset.person.lastName}} + `); assert.equal(find('h1').textContent.trim(), 'Jim Bob', 'precondition'); + assert.equal(changeset.get('person.firstName'), 'Jim', 'precondition firstName'); + assert.equal(changeset.get('person.lastName'), 'Bob', 'precondition lastName'); await fillIn('#first-name', 'foo'); await fillIn('#last-name', 'bar'); assert.equal(changeset.get('person.firstName'), 'foo', 'should update observable value'); - // TODO: nested keys - // assert.equal(changeset.get('person').firstName, 'foo', 'should update observable value'); + assert.equal(changeset.get('person.lastName'), 'bar', 'should update observable value lastName'); + assert.equal(changeset.get('person').firstName, 'foo', 'should work with top level key'); + assert.equal(changeset.get('person').lastName, 'bar', 'should work with top level key last name'); + assert.equal(changeset.person.firstName, 'foo', 'should work with top level key'); assert.equal(changeset.get('_content').person.firstName, 'Jim', 'keeps value on model as execute hasn\'t been called'); - // TODO: changeset-set will only apply to changeset and not underlying model - // so mut will actually modify underlying object - // I don't think we have the right observers here to trigger an update on the input - // for a nested object - // assert.equal(find('h1').textContent.trim(), 'foo bar', 'should update observable value'); + assert.equal(find('h1').textContent.trim(), 'foo bar', 'should update observable value'); }); skip('nested object updates when set without a validator', async function(assert) { @@ -315,19 +316,15 @@ module('Integration | Helper | changeset', function(hooks) { await fillIn('#first-name', 'foo'); await fillIn('#first-name', ''); - { - let actual = find('#first-name-error').textContent.trim(); - let expectedResult = 'need a first name'; - assert.equal(actual, expectedResult, 'shows error message'); - } + let actual = find('#first-name-error').textContent.trim(); + let expectedResult = 'need a first name'; + assert.equal(actual, expectedResult, 'shows error message'); await fillIn('#first-name', 'foo'); - { - let actual = find('#first-name-error').textContent.trim(); - let expectedResult = ''; - assert.equal(actual, expectedResult, 'hides error message'); - } + actual = find('#first-name-error').textContent.trim(); + expectedResult = ''; + assert.equal(actual, expectedResult, 'hides error message'); }); skip('nested object updates when set with async validator', async function(assert) { From 75a8cf8f683b9fa95f340a5411d7f101d22844c6 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 17 Nov 2019 17:18:33 -0800 Subject: [PATCH 22/75] get most working --- addon/-private/key-values.ts | 29 +++++++ addon/-private/normalize-object.ts | 14 ++-- addon/-private/set-deep.ts | 8 +- addon/-private/validated-changeset.ts | 80 ++++++++----------- addon/index.ts | 1 + addon/types/index.ts | 2 +- addon/utils/set-nested-property.ts | 17 ++-- .../integration/components/changeset-test.js | 2 +- tests/unit/changeset-test.js | 26 +++--- 9 files changed, 100 insertions(+), 79 deletions(-) create mode 100644 addon/-private/key-values.ts diff --git a/addon/-private/key-values.ts b/addon/-private/key-values.ts new file mode 100644 index 00000000..58b61733 --- /dev/null +++ b/addon/-private/key-values.ts @@ -0,0 +1,29 @@ +import isObject from '../utils/is-object'; + +// 'foo.bar.zaz' +let keysUpToValue: any[] = []; + +/** + * traverse through target and return leaf nodes with `value` property + * + * @method keyValues + * @param target + */ +export default function keyValues(obj: T): object[] { + let map = []; + for (let key in obj) { + keysUpToValue.push(key); + + if (obj[key] && isObject(obj[key])) { + if (Object.prototype.hasOwnProperty.apply(obj[key], ['value'])) { + map.push({ key: keysUpToValue.join('.'), value: obj[key].value }); + // stop collecting keys + keysUpToValue = []; + } else if (key !== 'value') { + map.push(...keyValues(obj[key])); + } + } + } + + return map; +} diff --git a/addon/-private/normalize-object.ts b/addon/-private/normalize-object.ts index f3194672..c1b6fa51 100644 --- a/addon/-private/normalize-object.ts +++ b/addon/-private/normalize-object.ts @@ -2,25 +2,27 @@ import isObject from '../utils/is-object'; /** * traverse through target and unset `value` from leaf key + * Shallow copy here is fine because we are swapping out the leaf nested object + * rather than mutating a property in something with reference * * @method normalizeObject * @param target */ export default function normalizeObject(target: T): T { - let obj = JSON.parse(JSON.stringify(target)); + let obj = { ...target }; for (let key in obj) { + if (key === 'value') { + return obj[key]; + } + if (obj[key] && isObject(obj[key])) { if (Object.prototype.hasOwnProperty.apply(obj[key], ['value'])) { obj[key] = obj[key].value; } else { - normalizeObject(obj[key]); + obj[key] = normalizeObject(obj[key]); } } - - if (key === 'value') { - return obj[key]; - } } return obj; diff --git a/addon/-private/set-deep.ts b/addon/-private/set-deep.ts index 052aa913..d1be3a47 100644 --- a/addon/-private/set-deep.ts +++ b/addon/-private/set-deep.ts @@ -1,3 +1,4 @@ +import Change from './change'; /** * TODO: consider * https://github.com/emberjs/ember.js/blob/822452c4432620fc67a777aba3b150098fd6812d/packages/%40ember/-internals/metal/lib/property_set.ts @@ -12,7 +13,7 @@ export default function setDeep(target: any, path: string, value: unknown): any let orig = target; if (keys.length === 1) { - result(target, keys[0], value); + target[path] = value; return target; } @@ -21,6 +22,9 @@ export default function setDeep(target: any, path: string, value: unknown): any if (!isObject(target[prop])) { target[prop] = {}; + } else if (isObject(target[prop]) && target[prop] instanceof Change) { + // we don't want to merge new changes with a Change instance higher up in the obj tree + target[prop] = {}; } // last iteration @@ -38,7 +42,7 @@ export default function setDeep(target: any, path: string, value: unknown): any function result(target: any, path: string, value: unknown) { if (isPlainObject(target[path]) && isPlainObject(value)) { - target[path] = Object.assign({}, target[path], value); + target[path] = { ...target[path], ...value }; } else { target[path] = value; } diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 048d4af8..7fdb02d1 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -4,11 +4,11 @@ import { isEqual } from '@ember/utils'; import Change from 'ember-changeset/-private/change'; +import keyValues from 'ember-changeset/-private/key-values'; import { notifierForEvent } from 'ember-changeset/-private/evented'; import Err from 'ember-changeset/-private/err'; import normalizeObject from 'ember-changeset/-private/normalize-object'; import pureAssign from 'ember-changeset/utils/assign'; -import inflate from 'ember-changeset/utils/inflate'; import isChangeset, { CHANGESET } from 'ember-changeset/utils/is-changeset'; import isObject from 'ember-changeset/utils/is-object'; import isPromise from 'ember-changeset/utils/is-promise'; @@ -144,15 +144,8 @@ export class BufferedChangeset implements IChangeset { get changes() { let obj = this[CHANGES]; - function transform(c: Change) { - return c.value; - } - - return keys(obj).map(key => { - let value = transform(obj[key]); - - return { key, value }; - }); + // [{ key, value }, ...] + return keyValues(obj); } // TODO: iterate and find all leaf errors @@ -177,15 +170,13 @@ export class BufferedChangeset implements IChangeset { get change() { let obj: Changes = this[CHANGES]; - function transform(c: Change) { - return c.value; - } - return inflate(obj, transform); + return normalizeObject(obj); } get error() { let obj: Errors = this[ERRORS]; - return obj; + // TODO: whyy? + return JSON.parse(JSON.stringify(obj)); } get data() { @@ -193,7 +184,7 @@ export class BufferedChangeset implements IChangeset { } get isValid() { - return Object.keys(this[ERRORS]).length === 0; + return keyValues(this[ERRORS]).length === 0; } get isPristine() { return Object.keys(this[CHANGES]).length === 0; @@ -288,7 +279,9 @@ export class BufferedChangeset implements IChangeset { if (this.isValid && this.isDirty) { let content: Content = this[CONTENT]; let changes: Changes = this[CHANGES]; - keys(changes).forEach(key => this.setDeep(content, key, changes[key].value)); + keys(changes).forEach(key => { + this[CONTENT] = this.setDeep(content, key, normalizeObject(changes)[key]); + }); } return this; @@ -500,6 +493,7 @@ export class BufferedChangeset implements IChangeset { /** * Manually push multiple errors to the changeset as an array. + * key maybe in form 'name.short' so need to get deep * * @method pushErrors */ @@ -508,7 +502,7 @@ export class BufferedChangeset implements IChangeset { ...newErrors: string[] | ValidationErr[] ) { let errors: Errors = this[ERRORS]; - let existingError: IErr | Err = errors[key] || new Err(null, []); + let existingError: IErr | Err = this.getDeep(errors, key) || new Err(null, []); let validation: ValidationErr | ValidationErr[] = existingError.validation; let value: any = this[key]; @@ -522,9 +516,6 @@ export class BufferedChangeset implements IChangeset { // @tracked this[ERRORS] = setNestedProperty(errors, (key), newError); - // this.notifyPropertyChange(ERRORS); - // this.notifyPropertyChange((key)); - return { value, validation }; } @@ -750,7 +741,7 @@ export class BufferedChangeset implements IChangeset { } /** - * Value for change or the original value. + * Value for change/error/content or the original value. */ _valueFor( key: string @@ -764,27 +755,28 @@ export class BufferedChangeset implements IChangeset { return e.value; } - let original: any = this.getDeep(content, key); + // 'person' + if (Object.prototype.hasOwnProperty.apply(changes, [key])) { + let result: Change = changes[key]; + if (isObject(result)) { + return normalizeObject(result); + } - if (changes.hasOwnProperty(key)) { - let c: Change = changes[key]; - return c.value; + return result.value; } - // nested thus circulate through `value` and see if match - if (key.indexOf('.') !== -1) { - let [baseKey, ...keyParts] = key.split('.'); - if (changes.hasOwnProperty(baseKey)) { - let { value } = changes[baseKey]; - // make sure to return value if not object - if(!value) { - return value; - } - let result = value[keyParts.join('.')]; + // 'person.username' + let [baseKey, ...remaining] = key.split('.'); + if (Object.prototype.hasOwnProperty.apply(changes, [baseKey])) { + let c: Change = changes[baseKey]; + let result = this.getDeep(normalizeObject(c), remaining.join('.')); + // just b/c top level key exists doesn't mean it has the nested key we are looking for + if (result) { return result; } } + let original: any = this.getDeep(content, key); return original; } @@ -855,7 +847,7 @@ export class BufferedChangeset implements IChangeset { // 'person' if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { let changes: Changes = this[CHANGES]; - let result: Change = changes[key]; + let result = changes[key]; if (isObject(result)) { return normalizeObject(result); } @@ -867,7 +859,7 @@ export class BufferedChangeset implements IChangeset { let [baseKey, ...remaining] = key.split('.'); if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [baseKey])) { let changes: Changes = this[CHANGES]; - let c: Change = changes[baseKey]; + let c = changes[baseKey]; let result = this.getDeep(normalizeObject(c), remaining.join('.')); // just b/c top level key exists doesn't mean it has the nested key we are looking for if (result) { @@ -875,17 +867,15 @@ export class BufferedChangeset implements IChangeset { } } - // finally return on underlying object - let content: Content = this[CONTENT]; - const result = this.getDeep(content, key); - if (result) { - return result; - } - // return getters/setters/methods on BufferedProxy instance if (this[key]) { return this[key]; } + + // finally return on underlying object + let content: Content = this[CONTENT]; + const result = this.getDeep(content, key); + return result; } set ( diff --git a/addon/index.ts b/addon/index.ts index 85ff9339..fb93e103 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -53,6 +53,7 @@ class EmberChangeset extends BufferedChangeset { // Return passed-in `error`. return error; } + /** * Manually push multiple errors to the changeset as an array. * diff --git a/addon/types/index.ts b/addon/types/index.ts index 0e1f02c9..24702d4c 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -74,7 +74,7 @@ export interface ChangesetDef { _runningValidations: RunningValidations, _bareChanges: { [s: string]: any }, - changes: { key: string; value: any; }[], //ComputedProperty, + changes: any, // { key: string; value: any; }[], //ComputedProperty, errors: { key: string; value: any; }[], //ComputedProperty, error: object, change: object, diff --git a/addon/utils/set-nested-property.ts b/addon/utils/set-nested-property.ts index 17569be3..5bc63f1e 100644 --- a/addon/utils/set-nested-property.ts +++ b/addon/utils/set-nested-property.ts @@ -33,18 +33,11 @@ export default function setNestedProperty( }); }); - // // Delete keys prefixed by `key`. - // objKeys - // .filter(k => k.indexOf(`${key}.`) === 0) - // .forEach(k => delete obj[k]); - - // Delete keys in path leading up to leaf key - // TODO: is this necessary? - if (key.split('.').length > 1) { - key.split('.').slice(-1).forEach(_ => { - delete obj[key]; - }); - } + // // Delete keys in path leading up to `key`. + // key.split('.').slice(0, -1).forEach((_, i, allParts) => { + // let key = allParts.slice(0, i+1).join('.'); + // delete obj[key]; + // }); // Set value and return. // obj[key] = value; diff --git a/tests/integration/components/changeset-test.js b/tests/integration/components/changeset-test.js index 6304719b..3f07615e 100644 --- a/tests/integration/components/changeset-test.js +++ b/tests/integration/components/changeset-test.js @@ -13,7 +13,7 @@ import { triggerEvent } from '@ember/test-helpers'; -module('Integration | Helper | changeset', function(hooks) { +module('scott Integration | Helper | changeset', function(hooks) { setupRenderingTest(hooks); test('it validates changes', async function(assert) { diff --git a/tests/unit/changeset-test.js b/tests/unit/changeset-test.js index c42fc3b2..11a8d919 100644 --- a/tests/unit/changeset-test.js +++ b/tests/unit/changeset-test.js @@ -50,7 +50,7 @@ function dummyValidator({ key, newValue, oldValue, changes, content }) { } } -module('Unit | Utility | changeset', function(hooks) { +module('scott Unit | Utility | changeset', function(hooks) { hooks.beforeEach(function() { let Dummy = EmberObject.extend({ save() { @@ -82,8 +82,8 @@ module('Unit | Utility | changeset', function(hooks) { let expectedResult = { name: { validation: 'too short', value: 'a' } }; dummyChangeset.set('name', 'a'); - assert.deepEqual(get(dummyChangeset, 'error'), expectedResult, 'should return error object'); - assert.deepEqual(get(dummyChangeset, 'change'), { name: 'a' }, 'should return change object'); + assert.deepEqual(dummyChangeset.error, expectedResult, 'should return error object'); + assert.deepEqual(dummyChangeset.change, { name: 'a' }, 'should return change object'); }); /** @@ -287,7 +287,9 @@ module('Unit | Utility | changeset', function(hooks) { let dummyChangeset = new Changeset(dummyModel, dummyValidator); assert.equal(dummyChangeset.get('name'), 'Bob', 'returns changeset initial value'); assert.deepEqual(dummyChangeset.get('contact.emails'), [ 'bob@email.com', 'the_bob@email.com' ], 'returns changeset initial value'); + dummyChangeset.set('contact.emails', [ 'fred@email.com', 'the_fred@email.com' ]); + assert.deepEqual(dummyChangeset.get('contact.emails'), [ 'fred@email.com', 'the_fred@email.com' ], 'returns changeset changed value'); dummyChangeset.rollback(); @@ -296,7 +298,7 @@ module('Unit | Utility | changeset', function(hooks) { assert.deepEqual(dummyChangeset.get('contact.emails'), [ 'fred@email.com', 'the_fred@email.com' ], 'returns changeset changed value'); dummyChangeset.execute(); - assert.deepEqual(dummyModel.get('contact.emails'), [ 'fred@email.com', 'the_fred@email.com' ], 'returns model saved value'); + assert.deepEqual(dummyModel.contact.emails, [ 'fred@email.com', 'the_fred@email.com' ], 'returns model saved value'); }); test('#getted Object proxies to underlying method', async function(assert) { @@ -686,7 +688,7 @@ module('Unit | Utility | changeset', function(hooks) { ['org', 'no usa for you'], ['org.usa.ca', 'bar'], ], - result: () => ({ org: { usa: { ny: '', ca: 'bar' } } }), + result: () => ({ org: { usa: { ca: 'bar' } } }), }, { model: () => ({ org: { usa: { ny: '', ca: '' } } }), @@ -775,7 +777,7 @@ module('Unit | Utility | changeset', function(hooks) { set(dummyModel, 'save', (dummyOptions) => { result = 'ok'; options = dummyOptions; - return 'saveResult'; + return Promise.resolve('saveResult'); }); let dummyChangeset = new Changeset(dummyModel); dummyChangeset.set('name', 'foo'); @@ -1301,10 +1303,10 @@ module('Unit | Utility | changeset', function(hooks) { assert.ok(get(dummyChangeset, 'isInvalid'), 'should be invalid'); assert.equal(get(dummyChangeset, 'error.email.validation'), 'Email already taken', 'should add the error'); assert.equal(get(dummyChangeset, 'error.email.value'), 'jim@bob.com', 'addError uses already present value'); - // assert.deepEqual(get(dummyChangeset, 'changes'), [{ key: 'email', value: 'jim@bob.com'}], 'errors set as changes on changeset'); - // dummyChangeset.set('email', 'unique@email.com'); - // assert.ok(get(dummyChangeset, 'isValid'), 'should be valid'); - // assert.deepEqual(get(dummyChangeset, 'changes')[0], { key: 'email', value: 'unique@email.com' }, 'has correct changes'); + assert.deepEqual(get(dummyChangeset, 'changes'), [{ key: 'email', value: 'jim@bob.com'}], 'errors set as changes on changeset'); + dummyChangeset.set('email', 'unique@email.com'); + assert.ok(get(dummyChangeset, 'isValid'), 'should be valid'); + assert.deepEqual(get(dummyChangeset, 'changes')[0], { key: 'email', value: 'unique@email.com' }, 'has correct changes'); }); test('#addError adds an error to the changeset on a nested property', async function(assert) { @@ -1314,8 +1316,8 @@ module('Unit | Utility | changeset', function(hooks) { assert.ok(get(dummyChangeset, 'isInvalid'), 'should be invalid'); assert.equal(get(dummyChangeset, 'error.email.localPart.validation'), 'Cannot contain +', 'should add the error'); - dummyChangeset.set('email.localPart', 'ok'); - assert.ok(get(dummyChangeset, 'isValid'), 'should be valid'); + // dummyChangeset.set('email.localPart', 'ok'); + // assert.ok(get(dummyChangeset, 'isValid'), 'should be valid'); }); test('#addError adds an array of errors to the changeset', async function(assert) { From 79dfb28af27cdc64f69e676fa19656710787becb Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 17 Nov 2019 20:20:13 -0800 Subject: [PATCH 23/75] remove unused inflate --- addon/types/index.ts | 4 -- addon/utils/inflate.ts | 36 -------------- tests/unit/utils/inflate-test.js | 80 -------------------------------- 3 files changed, 120 deletions(-) delete mode 100644 addon/utils/inflate.ts delete mode 100644 tests/unit/utils/inflate-test.js diff --git a/addon/types/index.ts b/addon/types/index.ts index 24702d4c..398152f5 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -57,10 +57,6 @@ export type Snapshot = { errors: { [s: string]: IErr }, }; -export type Inflated = { - [s: string]: Inflated | T, -}; - export type PrepareChangesFn = (obj: ({ [s: string]: any })) => ({ [s: string]: any }) export interface ChangesetDef { diff --git a/addon/utils/inflate.ts b/addon/utils/inflate.ts deleted file mode 100644 index 41b2b036..00000000 --- a/addon/utils/inflate.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { assert, runInDebug } from '@ember/debug'; -import isObject from 'ember-changeset/utils/is-object'; -import setDeep from '../-private/set-deep'; - -const { keys } = Object; - -/** - * Inflate an Object, optionally transforming each key's value by - * `transform` function. - */ -export default function inflate( - obj: { [key: string]: any }, - transform: (arg: T) => any = a => a -): object { - runInDebug(() => { - keys(obj).forEach(key => { - key.split('.').forEach((_part, i, allParts) => { - if (i < allParts.length - 1) { - let path = allParts.slice(0, i+1).join('.'); - let msg = `Path ${path} leading up to ${key} must be an Object if specified.`; - assert(msg, isObject(obj[path]) || !obj[path]); - } - }); - }); - }); - - let result = keys(obj) - .sort() - .reduce((inflatedObj, key) => { - // set-deep will convert nested string key to single key per level - setDeep(inflatedObj, key, transform(obj[key])); - return inflatedObj; - }, {}); - - return result; -} diff --git a/tests/unit/utils/inflate-test.js b/tests/unit/utils/inflate-test.js deleted file mode 100644 index b6c9ae10..00000000 --- a/tests/unit/utils/inflate-test.js +++ /dev/null @@ -1,80 +0,0 @@ -import inflate from 'ember-changeset/utils/inflate'; -import { module, test } from 'qunit'; - -module('Unit | Utility | computed/inflate'); - -[ - { - desc: 'precondition: keys must not overwrite each other', - obj: { - 'foo.bar.baz': 42, - 'foo.bar': 42, - 'foo': 42, - }, - expected: 'Assertion Failed: Path foo leading up to foo.bar.baz must be an Object if specified.', - error: true, - method: 'throws', - }, - { - desc: 'precondition: keys must not overwrite each other', - obj: { - 'foo.bar.baz': 42, - 'foo.bar': 42, - }, - expected: /Assertion Failed: Path foo.bar leading up to foo.bar.baz must be an Object if specified./, - error: true, - method: 'throws', - }, - { - desc: 'precondition: path leading up to key can be empty', - obj: { - 'foo.bar.baz': 42, - }, - expected: { foo: { bar: { baz: 42 } } }, - method: 'deepEqual', - }, - { - desc: 'it works', - obj: { - 'foo.bar.baz': 42, - 'foo.bar': {}, - 'foo': {}, - }, - expected: { foo: { bar: { baz: 42 } } }, - method: 'deepEqual', - }, - { - desc: "it doesn't overwrite sibling keys", - obj: { - 'foo.bar.baz': 42, - 'foo.bar.qux': 'hello', - 'foo.bar': {}, - 'foo': {}, - }, - expected: { foo: { bar: { baz: 42, qux: 'hello' } } }, - method: 'deepEqual', - }, - { - desc: 'it transforms values with an optional `transform` function', - obj: { - 'foo.bar.baz': { value: 42 }, - 'foo.bar.qux': { value: 'hello' }, - }, - expected: { foo: { bar: { baz: 42, qux: 'hello' } } }, - transform: (e) => e.value, - method: 'deepEqual', - }, -].forEach(({ desc, obj, expected, error = false, transform, method }) => { - test(`inflate - ${desc}`, async function(assert) { - if (error) { - try { - inflate(obj); - } catch(e) { - assert[method](e); - } - } else { - let actually = inflate(obj, transform); - assert[method](actually, expected); - } - }); -}); From 88131ee62f238d7d28d0042a14fab5a62b8f2f97 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 17 Nov 2019 22:19:54 -0800 Subject: [PATCH 24/75] merge deep on the content --- addon/-private/merge-deep.ts | 92 +++++++++++++++++++++++++++ addon/-private/validated-changeset.ts | 12 ++-- addon/index.ts | 1 - tests/unit/changeset-test.js | 5 +- 4 files changed, 100 insertions(+), 10 deletions(-) create mode 100644 addon/-private/merge-deep.ts diff --git a/addon/-private/merge-deep.ts b/addon/-private/merge-deep.ts new file mode 100644 index 00000000..8c1b469e --- /dev/null +++ b/addon/-private/merge-deep.ts @@ -0,0 +1,92 @@ +function isMergeableObject(value: any): Boolean { + return isNonNullObject(value) && !isSpecial(value) +} + +function isNonNullObject(value: any): Boolean { + return !!value && typeof value === 'object' +} + +function isSpecial(value: any): Boolean { + var stringValue = Object.prototype.toString.call(value) + + return stringValue === '[object RegExp]' || stringValue === '[object Date]' +} + +function emptyTarget(val: any): [] | {} { + return Array.isArray(val) ? [] : {} +} + +function cloneUnlessOtherwiseSpecified(value: any): any { + return (isMergeableObject(value)) + ? mergeDeep(emptyTarget(value), value) + : value +} + +function arrayMerge(target: any, source: any): object[] { + return target.concat(source).map((item: any) => { + return cloneUnlessOtherwiseSpecified(item) + }) +} + +function getEnumerableOwnPropertySymbols(target: any): any { + return Object.getOwnPropertySymbols + ? Object.getOwnPropertySymbols(target).filter(symbol => { + return target.propertyIsEnumerable(symbol) + }) + : [] +} + +function getKeys(target: any) { + return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target)) +} + +function propertyIsOnObject(object: any, property: any) { + try { + return property in object + } catch(_) { + return false + } +} + +// Protects from prototype poisoning and unexpected merging up the prototype chain. +function propertyIsUnsafe(target: any, key: string): Boolean { + return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet, + && !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain, + && Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable. +} + +function mergeObject(target: any, source: any) { + // var destination: { [k: string]: any } = {} + // if (isMergeableObject(target)) { + // getKeys(target).forEach(key => { + // destination[key] = target[key];//cloneUnlessOtherwiseSpecified(target[key]) + // }) + // } + getKeys(source).forEach(key => { + if (propertyIsUnsafe(target, key)) { + return; + } + + if (propertyIsOnObject(target, key) && isMergeableObject(source[key])) { + target[key] = mergeDeep(target[key], source[key]); + } else { + target[key] = source[key];// cloneUnlessOtherwiseSpecified(source[key]) + } + }); + + return target; +} + +export default function mergeDeep(target: any, source: any) { + var sourceIsArray = Array.isArray(source) + var targetIsArray = Array.isArray(target) + var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray + + if (!sourceAndTargetTypesMatch) { + return cloneUnlessOtherwiseSpecified(source) + } else if (sourceIsArray) { + return source; + } else { + return mergeObject(target, source) + } +} diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 7fdb02d1..bc2ed58a 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -14,9 +14,9 @@ import isObject from 'ember-changeset/utils/is-object'; import isPromise from 'ember-changeset/utils/is-promise'; import mergeNested from 'ember-changeset/utils/merge-nested'; import objectWithout from 'ember-changeset/utils/object-without'; -import setNestedProperty from 'ember-changeset/utils/set-nested-property'; import take from 'ember-changeset/utils/take'; import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; +import mergeDeep from './merge-deep'; import setDeep from './set-deep'; import getDeep from './get-deep'; import { @@ -279,9 +279,7 @@ export class BufferedChangeset implements IChangeset { if (this.isValid && this.isDirty) { let content: Content = this[CONTENT]; let changes: Changes = this[CHANGES]; - keys(changes).forEach(key => { - this[CONTENT] = this.setDeep(content, key, normalizeObject(changes)[key]); - }); + this[CONTENT] = mergeDeep(content, normalizeObject(changes)); } return this; @@ -485,7 +483,7 @@ export class BufferedChangeset implements IChangeset { // Add `key` to errors map. let errors: Errors = this[ERRORS]; // @tracked - this[ERRORS] = setNestedProperty(errors, key, newError); + this[ERRORS] = this.setDeep(errors, key, newError); // Return passed-in `error`. return error; @@ -514,7 +512,7 @@ export class BufferedChangeset implements IChangeset { validation = [...v, ...newErrors]; let newError = new Err(value, validation); // @tracked - this[ERRORS] = setNestedProperty(errors, (key), newError); + this[ERRORS] = this.setDeep(errors, (key), newError); return { value, validation }; } @@ -714,7 +712,7 @@ export class BufferedChangeset implements IChangeset { // Happy path: update change map. if (!isEqual(oldValue, value)) { // @tracked - this[CHANGES] = setNestedProperty(changes, key, new Change(value)); + this[CHANGES] = this.setDeep(changes, key, new Change(value)); } else if (key in changes) { // @tracked this[CHANGES] = this._deleteKey(CHANGES, key) as Changes; diff --git a/addon/index.ts b/addon/index.ts index fb93e103..60549133 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -28,7 +28,6 @@ class EmberChangeset extends BufferedChangeset { @tracked [CONTENT]: object; getDeep = safeGet as any; - setDeep = deepSet as any; safeGet(obj: any, key: string) { return safeGet(obj, key); diff --git a/tests/unit/changeset-test.js b/tests/unit/changeset-test.js index 11a8d919..24de8ad6 100644 --- a/tests/unit/changeset-test.js +++ b/tests/unit/changeset-test.js @@ -688,7 +688,7 @@ module('scott Unit | Utility | changeset', function(hooks) { ['org', 'no usa for you'], ['org.usa.ca', 'bar'], ], - result: () => ({ org: { usa: { ca: 'bar' } } }), + result: () => ({ org: { usa: { ca: 'bar', ny: '' } } }), }, { model: () => ({ org: { usa: { ny: '', ca: '' } } }), @@ -739,7 +739,8 @@ module('scott Unit | Utility | changeset', function(hooks) { dummyChangeset.set('org.usa.ny', 'ny'); dummyChangeset.set('org.usa.ma', { name: 'Massachusetts' }); dummyChangeset.execute(); - assert.deepEqual(get(dummyChangeset, 'change'), expectedResult, 'should have correct shape'); + assert.deepEqual(dummyChangeset.change, expectedResult, 'should have correct shape'); + assert.deepEqual(dummyChangeset._content.org, expectedResult.org, 'should have correct shape'); assert.deepEqual(get(dummyModel, 'org'), expectedResult.org, 'should set value'); }); From ca627926af474286f674ccdce7a1fd70d1e013b6 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 17 Nov 2019 22:21:07 -0800 Subject: [PATCH 25/75] cleanup on deep merge utility --- addon/-private/merge-deep.ts | 26 ++------------------------ addon/index.ts | 1 - 2 files changed, 2 insertions(+), 25 deletions(-) diff --git a/addon/-private/merge-deep.ts b/addon/-private/merge-deep.ts index 8c1b469e..181b73d2 100644 --- a/addon/-private/merge-deep.ts +++ b/addon/-private/merge-deep.ts @@ -12,22 +12,6 @@ function isSpecial(value: any): Boolean { return stringValue === '[object RegExp]' || stringValue === '[object Date]' } -function emptyTarget(val: any): [] | {} { - return Array.isArray(val) ? [] : {} -} - -function cloneUnlessOtherwiseSpecified(value: any): any { - return (isMergeableObject(value)) - ? mergeDeep(emptyTarget(value), value) - : value -} - -function arrayMerge(target: any, source: any): object[] { - return target.concat(source).map((item: any) => { - return cloneUnlessOtherwiseSpecified(item) - }) -} - function getEnumerableOwnPropertySymbols(target: any): any { return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter(symbol => { @@ -56,12 +40,6 @@ function propertyIsUnsafe(target: any, key: string): Boolean { } function mergeObject(target: any, source: any) { - // var destination: { [k: string]: any } = {} - // if (isMergeableObject(target)) { - // getKeys(target).forEach(key => { - // destination[key] = target[key];//cloneUnlessOtherwiseSpecified(target[key]) - // }) - // } getKeys(source).forEach(key => { if (propertyIsUnsafe(target, key)) { return; @@ -70,7 +48,7 @@ function mergeObject(target: any, source: any) { if (propertyIsOnObject(target, key) && isMergeableObject(source[key])) { target[key] = mergeDeep(target[key], source[key]); } else { - target[key] = source[key];// cloneUnlessOtherwiseSpecified(source[key]) + target[key] = source[key]; } }); @@ -83,7 +61,7 @@ export default function mergeDeep(target: any, source: any) { var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray if (!sourceAndTargetTypesMatch) { - return cloneUnlessOtherwiseSpecified(source) + return source; } else if (sourceIsArray) { return source; } else { diff --git a/addon/index.ts b/addon/index.ts index 60549133..66d58c1a 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -15,7 +15,6 @@ import { ValidatorMap, ValidationErr, } from 'ember-changeset/types'; -import deepSet from 'ember-deep-set'; const CHANGES = '_changes'; const ERRORS = '_errors'; From 40ff0fddeca16286a985ddeaa0359e34f31a91d1 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 17 Nov 2019 22:25:12 -0800 Subject: [PATCH 26/75] no more set-nested --- addon/utils/merge-nested.ts | 4 +- addon/utils/set-nested-property.ts | 46 --------- tests/unit/utils/set-nested-property-test.js | 98 -------------------- 3 files changed, 2 insertions(+), 146 deletions(-) delete mode 100644 addon/utils/set-nested-property.ts delete mode 100644 tests/unit/utils/set-nested-property-test.js diff --git a/addon/utils/merge-nested.ts b/addon/utils/merge-nested.ts index cedf2363..daf0da66 100644 --- a/addon/utils/merge-nested.ts +++ b/addon/utils/merge-nested.ts @@ -1,4 +1,4 @@ -import setNestedProperty from 'ember-changeset/utils/set-nested-property'; +import setDeep from '../-private/set-deep'; const { keys } = Object; @@ -15,7 +15,7 @@ export default function mergeNested( objects.forEach(obj => keys(obj).forEach(key => - setNestedProperty(finalObj, key, obj[key]) + setDeep(finalObj, key, obj[key]) ) ); diff --git a/addon/utils/set-nested-property.ts b/addon/utils/set-nested-property.ts deleted file mode 100644 index 5bc63f1e..00000000 --- a/addon/utils/set-nested-property.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { assert, runInDebug } from '@ember/debug'; -import setDeep from '../-private/set-deep'; - -const { keys } = Object; - -/** - * Set a property on an `obj` with keys - * - * This function deletes every key prefixed by `key` in `obj`, as well - * as every key in the path leading up to `key`. Keeps keys that don't match. - * Then sets original key on obj after aforementioned cleanup - * example ``` - obj: { - 'foo': 'happy', - 'foo.bar': 'freakin', - 'foo.bar.baz': 'holidays', - }, - * ``` - */ -export default function setNestedProperty( - obj: { [key: string]: T }, - key: string, - value: T -): { [key: string]: T } { - let objKeys = keys(obj); - - // Ensure object keys are in correct format. - runInDebug(() => { - objKeys.forEach(k => { - let parts = k.split('.'); - let condition = parts.length === parts.filter(Boolean).length; - assert('Object must not have keys with empty parts.', condition); - }); - }); - - // // Delete keys in path leading up to `key`. - // key.split('.').slice(0, -1).forEach((_, i, allParts) => { - // let key = allParts.slice(0, i+1).join('.'); - // delete obj[key]; - // }); - - // Set value and return. - // obj[key] = value; - // return obj; - return setDeep(obj, key, value); -} diff --git a/tests/unit/utils/set-nested-property-test.js b/tests/unit/utils/set-nested-property-test.js deleted file mode 100644 index 02f95267..00000000 --- a/tests/unit/utils/set-nested-property-test.js +++ /dev/null @@ -1,98 +0,0 @@ -import setNestedProperty from 'ember-changeset/utils/set-nested-property'; -import { module, test } from 'qunit'; - -module('Unit | Utility | set nested property'); - -[ - { - desc: 'it rejects objects with malformed keys', - obj: { - '.foo': 'happy', - '.foo.': 'freakin', - '...baz': 'holidays', - }, - key: 'foo', - value: 42, - actual: (obj, key, value) => () => setNestedProperty(obj, key, value), - expected: /Assertion Failed: Object must not have keys with empty parts./, - method: 'throws', - }, - { - desc: 'it deletes keys with `key` in their path', - obj: { - 'foo': 'happy', - 'foo.bar': 'freakin', - 'foo.bar.baz': 'holidays', - }, - key: 'foo', - value: 42, - actual: (obj, key, value) => { - setNestedProperty(obj, key, value); - return obj; - }, - expected: { - 'foo': 42, - }, - method: 'deepEqual', - }, - { - desc: "it doesn't delete keys that don't have `key` in their path", - obj: { - 'foo': 'happy', - 'foobar': 'freakin', - 'foobar.baz': 'holidays', - }, - key: 'foo', - value: 42, - actual: (obj, key, value) => { - setNestedProperty(obj, key, value); - return obj; - }, - expected: { - 'foo': 42, - 'foobar': 'freakin', - 'foobar.baz': 'holidays', - }, - method: 'deepEqual', - }, - { - desc: 'it leaves sibling keys alone', - obj: { - 'foo': 'happy', - 'foo.bar': 'freakin', - 'foo.bar.baz': 'holidays', - 'foo.bar.qux': 'holidays', - }, - key: 'foo.bar.baz', - value: 'whoop', - actual: (obj, key, value) => { - setNestedProperty(obj, key, value); - return obj; - }, - expected: { - 'foo.bar.baz': 'whoop', - 'foo.bar.qux': 'holidays', - }, - method: 'deepEqual', - }, - { - desc: 'deletes every key in the path leading up to `key`', - obj: { - 'foo.bar.baz': 'holidays', - }, - key: 'foo.bar.baz', - value: 'whoop', - actual: (obj, key, value) => { - setNestedProperty(obj, key, value); - return obj; - }, - expected: { - 'foo.bar.baz': 'whoop', - }, - method: 'deepEqual', - }, -].forEach(({ desc, obj, key, value, actual, expected, method }) => { - test(`setNestedProperty - ${desc}`, async function(assert) { - assert[method](actual(obj, key, value), expected); - }); -}); From 1ae403a0907aac7b79f817b58228a180c7b8392e Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 17 Nov 2019 22:25:29 -0800 Subject: [PATCH 27/75] moar comments --- addon/-private/merge-deep.ts | 10 +++++++++- addon/-private/validated-changeset.ts | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/addon/-private/merge-deep.ts b/addon/-private/merge-deep.ts index 181b73d2..9e3f7d58 100644 --- a/addon/-private/merge-deep.ts +++ b/addon/-private/merge-deep.ts @@ -55,7 +55,15 @@ function mergeObject(target: any, source: any) { return target; } -export default function mergeDeep(target: any, source: any) { +/** + * goal is to mutate target with source's properties, ensuring we dont encounter + * pitfalls of { ..., ... } spread syntax overwriting keys on objects that we merged + * + * @method mergeDeep + * @param target + * @param source + */ +export default function mergeDeep(target: any, source: any): object | [any] { var sourceIsArray = Array.isArray(source) var targetIsArray = Array.isArray(target) var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index bc2ed58a..0902d703 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -279,6 +279,8 @@ export class BufferedChangeset implements IChangeset { if (this.isValid && this.isDirty) { let content: Content = this[CONTENT]; let changes: Changes = this[CHANGES]; + // we want mutation on original object + // @tracked this[CONTENT] = mergeDeep(content, normalizeObject(changes)); } From d30d7e51b712badc01d40f9ff41f10c73d3d68ac Mon Sep 17 00:00:00 2001 From: snewcomer Date: Mon, 18 Nov 2019 22:35:42 -0800 Subject: [PATCH 28/75] some improvements to tests and imports --- addon/-private/set-deep.ts | 1 + addon/-private/validated-changeset.ts | 6 +++--- addon/index.ts | 20 +++++++++++++++++++ .../integration/components/changeset-test.js | 2 +- .../integration/helpers/changeset-get-test.ts | 6 +++--- tests/unit/changeset-test.js | 2 +- 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/addon/-private/set-deep.ts b/addon/-private/set-deep.ts index d1be3a47..6995e3e7 100644 --- a/addon/-private/set-deep.ts +++ b/addon/-private/set-deep.ts @@ -40,6 +40,7 @@ export default function setDeep(target: any, path: string, value: unknown): any return orig; } +// to avoid overwriting child keys of leaf node function result(target: any, path: string, value: unknown) { if (isPlainObject(target[path]) && isPlainObject(value)) { target[path] = { ...target[path], ...value }; diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 0902d703..7705d514 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -16,9 +16,9 @@ import mergeNested from 'ember-changeset/utils/merge-nested'; import objectWithout from 'ember-changeset/utils/object-without'; import take from 'ember-changeset/utils/take'; import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; -import mergeDeep from './merge-deep'; -import setDeep from './set-deep'; -import getDeep from './get-deep'; +import mergeDeep from 'ember-changeset/-private/merge-deep'; +import setDeep from 'ember-changeset/-private/set-deep'; +import getDeep from 'ember-changeset/-private/get-deep'; import { Changes, Config, diff --git a/addon/index.ts b/addon/index.ts index 66d58c1a..62292646 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -3,9 +3,12 @@ import { BufferedChangeset } from './-private/validated-changeset'; import { notifyPropertyChange } from '@ember/object'; import { tracked } from '@glimmer/tracking'; import { get as safeGet } from '@ember/object'; +import mergeDeep from 'ember-changeset/-private/merge-deep'; +import normalizeObject from 'ember-changeset/-private/normalize-object'; import { Config, Changes, + Content, Errors, IErr, IChangeset, @@ -115,6 +118,23 @@ class EmberChangeset extends BufferedChangeset { return result; } + + /** + * Executes the changeset if in a valid state. + * + * @method execute + */ + execute(): IChangeset { + if (this.isValid && this.isDirty) { + let content: Content = this[CONTENT]; + let changes: Changes = this[CHANGES]; + // we want mutation on original object + // @tracked + this[CONTENT] = mergeDeep(content, normalizeObject(changes), { safeGet }); + } + + return this; + } } /** diff --git a/tests/integration/components/changeset-test.js b/tests/integration/components/changeset-test.js index 3f07615e..6304719b 100644 --- a/tests/integration/components/changeset-test.js +++ b/tests/integration/components/changeset-test.js @@ -13,7 +13,7 @@ import { triggerEvent } from '@ember/test-helpers'; -module('scott Integration | Helper | changeset', function(hooks) { +module('Integration | Helper | changeset', function(hooks) { setupRenderingTest(hooks); test('it validates changes', async function(assert) { diff --git a/tests/integration/helpers/changeset-get-test.ts b/tests/integration/helpers/changeset-get-test.ts index 73d8ac38..28e0f2db 100644 --- a/tests/integration/helpers/changeset-get-test.ts +++ b/tests/integration/helpers/changeset-get-test.ts @@ -30,7 +30,7 @@ module('Integration | Helper | changeset-get', function(hooks) { this.set('fieldName', 'name.first'); }); - test('it fails to retrieve the current value using {{get}}', async function(assert) { + test('it retrieves the current value using {{get}}', async function(assert) { await render(hbs` Date: Mon, 18 Nov 2019 22:37:12 -0800 Subject: [PATCH 29/75] some improvements to merge-deep --- addon/-private/merge-deep.ts | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/addon/-private/merge-deep.ts b/addon/-private/merge-deep.ts index 9e3f7d58..f1e16e81 100644 --- a/addon/-private/merge-deep.ts +++ b/addon/-private/merge-deep.ts @@ -1,15 +1,15 @@ function isMergeableObject(value: any): Boolean { - return isNonNullObject(value) && !isSpecial(value) + return isNonNullObject(value) && !isSpecial(value); } function isNonNullObject(value: any): Boolean { - return !!value && typeof value === 'object' + return !!value && typeof value === 'object'; } function isSpecial(value: any): Boolean { - var stringValue = Object.prototype.toString.call(value) + let stringValue = Object.prototype.toString.call(value); - return stringValue === '[object RegExp]' || stringValue === '[object Date]' + return stringValue === '[object RegExp]' || stringValue === '[object Date]'; } function getEnumerableOwnPropertySymbols(target: any): any { @@ -17,7 +17,7 @@ function getEnumerableOwnPropertySymbols(target: any): any { ? Object.getOwnPropertySymbols(target).filter(symbol => { return target.propertyIsEnumerable(symbol) }) - : [] + : []; } function getKeys(target: any) { @@ -26,9 +26,9 @@ function getKeys(target: any) { function propertyIsOnObject(object: any, property: any) { try { - return property in object + return property in object; } catch(_) { - return false + return false; } } @@ -36,17 +36,17 @@ function propertyIsOnObject(object: any, property: any) { function propertyIsUnsafe(target: any, key: string): Boolean { return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet, && !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain, - && Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable. + && Object.propertyIsEnumerable.call(target, key)); // and also unsafe if they're nonenumerable. } -function mergeObject(target: any, source: any) { +function mergeObject(target: any, source: any, options: any) { getKeys(source).forEach(key => { if (propertyIsUnsafe(target, key)) { return; } if (propertyIsOnObject(target, key) && isMergeableObject(source[key])) { - target[key] = mergeDeep(target[key], source[key]); + target[key] = mergeDeep(options.safeGet(target, key), options.safeGet(source, key), options); } else { target[key] = source[key]; } @@ -55,6 +55,10 @@ function mergeObject(target: any, source: any) { return target; } +interface Options { + safeGet: any +} + /** * goal is to mutate target with source's properties, ensuring we dont encounter * pitfalls of { ..., ... } spread syntax overwriting keys on objects that we merged @@ -63,16 +67,17 @@ function mergeObject(target: any, source: any) { * @param target * @param source */ -export default function mergeDeep(target: any, source: any): object | [any] { - var sourceIsArray = Array.isArray(source) - var targetIsArray = Array.isArray(target) - var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray +export default function mergeDeep(target: any, source: any, options: Options): object | [any] { + options.safeGet = options.safeGet || function(obj: any, key: string): any { return obj[key] }; + let sourceIsArray = Array.isArray(source); + let targetIsArray = Array.isArray(target); + let sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; if (!sourceAndTargetTypesMatch) { return source; } else if (sourceIsArray) { return source; } else { - return mergeObject(target, source) + return mergeObject(target, source, options); } } From 82af80b65c4b2d0478ca0761755c37f6141bec1a Mon Sep 17 00:00:00 2001 From: snewcomer Date: Mon, 18 Nov 2019 23:05:07 -0800 Subject: [PATCH 30/75] update testing Ci --- .travis.yml | 2 -- config/ember-try.js | 16 ---------------- 2 files changed, 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index ab3e592e..44e2146e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,8 +49,6 @@ jobs: # we recommend new addons test the current and previous LTS # as well as latest stable release (bonus points to beta/canary) - stage: "Additional Tests" - env: EMBER_TRY_SCENARIO=ember-lts-3.4 - - env: EMBER_TRY_SCENARIO=ember-lts-3.8 - env: EMBER_TRY_SCENARIO=ember-release - env: EMBER_TRY_SCENARIO=ember-beta - env: EMBER_TRY_SCENARIO=ember-canary diff --git a/config/ember-try.js b/config/ember-try.js index c1d83d6f..9c3ceab6 100644 --- a/config/ember-try.js +++ b/config/ember-try.js @@ -6,22 +6,6 @@ module.exports = async function() { return { useYarn: true, scenarios: [ - { - name: 'ember-lts-3.4', - npm: { - devDependencies: { - 'ember-source': '~3.4.0' - } - } - }, - { - name: 'ember-lts-3.8', - npm: { - devDependencies: { - 'ember-source': '~3.8.0' - } - } - }, { name: 'ember-release', npm: { From d9c6a626685185e470c4586ba03b886fb09f46b4 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 09:33:54 -0700 Subject: [PATCH 31/75] fix merge deep by looking for value --- addon/-private/merge-deep.ts | 67 +++++++++++++++++++++++---- addon/-private/validated-changeset.ts | 2 +- addon/index.ts | 5 +- tests/integration/main-test.js | 8 ++-- 4 files changed, 65 insertions(+), 17 deletions(-) diff --git a/addon/-private/merge-deep.ts b/addon/-private/merge-deep.ts index f1e16e81..a0c4e164 100644 --- a/addon/-private/merge-deep.ts +++ b/addon/-private/merge-deep.ts @@ -1,3 +1,8 @@ +interface Options { + safeGet: any + safeSet: any +} + function isMergeableObject(value: any): Boolean { return isNonNullObject(value) && !isSpecial(value); } @@ -39,26 +44,69 @@ function propertyIsUnsafe(target: any, key: string): Boolean { && Object.propertyIsEnumerable.call(target, key)); // and also unsafe if they're nonenumerable. } -function mergeObject(target: any, source: any, options: any) { +let kv: { [k: string]: any } = {}; +let possibleKeys: string[] = []; + +/** + * DFS - traverse depth first until find object with `value`. Then go back up tree and try on next key + * need to exhaust all possible avenues. + * + * @method buildPathToValue + */ +function buildPathToValue(source: any, options: Options): void { + Object.keys(source).forEach((key: string): void => { + let possible = source[key]; + if (possible && possible.hasOwnProperty('value')) { + possibleKeys.push(key); + kv[possibleKeys.join('.')] = possible.value; + possibleKeys = []; + return; + } + + if (typeof possible === 'object') { + possibleKeys.push(key); + buildPathToValue(possible, options); + } else { + possibleKeys = []; + } + }); +} + +/** + * `source` will always have a leaf key `value` with the proeprty we want to set + * @method mergeObject + */ +function mergeObject(target: any, source: any, options: Options) { getKeys(source).forEach(key => { + // proto poisoning. So can set by nested key path 'person.name' if (propertyIsUnsafe(target, key)) { + if (options.safeSet) { + buildPathToValue(source, options); + if (Object.keys(kv).length > 0) { + // we found some keys! + for (key in kv) { + const val = kv[key]; + options.safeSet(target, key, val); + } + } + + kv = {}; + } + return; } - if (propertyIsOnObject(target, key) && isMergeableObject(source[key])) { + // else safe key on object + if (propertyIsOnObject(target, key) && isMergeableObject(source[key]) && !source[key].hasOwnProperty('value')) { target[key] = mergeDeep(options.safeGet(target, key), options.safeGet(source, key), options); } else { - target[key] = source[key]; + return target[key] = source[key].value; } }); return target; } -interface Options { - safeGet: any -} - /** * goal is to mutate target with source's properties, ensuring we dont encounter * pitfalls of { ..., ... } spread syntax overwriting keys on objects that we merged @@ -67,8 +115,9 @@ interface Options { * @param target * @param source */ -export default function mergeDeep(target: any, source: any, options: Options): object | [any] { - options.safeGet = options.safeGet || function(obj: any, key: string): any { return obj[key] }; +export default function mergeDeep(target: any, source: any, options: Options = { safeGet: undefined, safeSet: undefined }): object | [any] { + options['safeGet'] = options.safeGet || function(obj: any, key: string): any { return obj[key] }; + options['safeSet'] = options.safeSet; let sourceIsArray = Array.isArray(source); let targetIsArray = Array.isArray(target); let sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 7705d514..ee08f769 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -281,7 +281,7 @@ export class BufferedChangeset implements IChangeset { let changes: Changes = this[CHANGES]; // we want mutation on original object // @tracked - this[CONTENT] = mergeDeep(content, normalizeObject(changes)); + this[CONTENT] = mergeDeep(content, changes); } return this; diff --git a/addon/index.ts b/addon/index.ts index 62292646..d8ac6d28 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -2,9 +2,8 @@ import { assert } from '@ember/debug'; import { BufferedChangeset } from './-private/validated-changeset'; import { notifyPropertyChange } from '@ember/object'; import { tracked } from '@glimmer/tracking'; -import { get as safeGet } from '@ember/object'; +import { get as safeGet, set as safeSet } from '@ember/object'; import mergeDeep from 'ember-changeset/-private/merge-deep'; -import normalizeObject from 'ember-changeset/-private/normalize-object'; import { Config, Changes, @@ -130,7 +129,7 @@ class EmberChangeset extends BufferedChangeset { let changes: Changes = this[CHANGES]; // we want mutation on original object // @tracked - this[CONTENT] = mergeDeep(content, normalizeObject(changes), { safeGet }); + this[CONTENT] = mergeDeep(content, changes, { safeGet, safeSet }); } return this; diff --git a/tests/integration/main-test.js b/tests/integration/main-test.js index 4d385c0d..65308d8f 100644 --- a/tests/integration/main-test.js +++ b/tests/integration/main-test.js @@ -32,14 +32,14 @@ module('Integration | main', function(hooks) { changeset.set('profile.nickname', 'g'); set(changeset, 'profile.lastName', 'Hopper'); - assert.equal(changeset.get('profile.firstName'), 'Grace'); - assert.equal(changeset.get('profile.nickname'), 'g'); - assert.equal(changeset.get('profile.lastName'), 'Hopper'); + assert.equal(changeset.get('profile.firstName'), 'Grace', 'has firstName after set'); + assert.equal(changeset.get('profile.nickname'), 'g', 'has nickname after set'); + assert.equal(changeset.get('profile.lastName'), 'Ross', 'has last name after test'); changeset.execute(); assert.equal(user.get('profile.firstName'), 'Grace', 'firstName after execute'); - assert.equal(user.get('profile.lastName'), 'Hopper', 'lastName after execute'); + assert.equal(user.get('profile.lastName'), 'Ross', 'lastName after execute'); assert.equal(user.get('profile.nickname'), 'g', 'nickname after execute'); let profile; From 004d77c809d42f2f348affe12e76efe814f2b945 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 11:21:08 -0700 Subject: [PATCH 32/75] address keyValues map and add documentation --- .../{key-values.ts => get-key-values.ts} | 16 +++++++--------- addon/-private/validated-changeset.ts | 14 +++++++++++--- 2 files changed, 18 insertions(+), 12 deletions(-) rename addon/-private/{key-values.ts => get-key-values.ts} (56%) diff --git a/addon/-private/key-values.ts b/addon/-private/get-key-values.ts similarity index 56% rename from addon/-private/key-values.ts rename to addon/-private/get-key-values.ts index 58b61733..a258f784 100644 --- a/addon/-private/key-values.ts +++ b/addon/-private/get-key-values.ts @@ -1,26 +1,24 @@ import isObject from '../utils/is-object'; -// 'foo.bar.zaz' -let keysUpToValue: any[] = []; - /** - * traverse through target and return leaf nodes with `value` property + * traverse through target and return leaf nodes with `value` property and key as 'person.name' * - * @method keyValues - * @param target + * @method getKeyValues + * @return {Array} [{ 'person.name': value }] */ -export default function keyValues(obj: T): object[] { +export function getKeyValues>(obj: T, keysUpToValue: string[] = []): object[] { let map = []; + for (let key in obj) { keysUpToValue.push(key); if (obj[key] && isObject(obj[key])) { - if (Object.prototype.hasOwnProperty.apply(obj[key], ['value'])) { + if (Object.prototype.hasOwnProperty.call(obj[key], 'value')) { map.push({ key: keysUpToValue.join('.'), value: obj[key].value }); // stop collecting keys keysUpToValue = []; } else if (key !== 'value') { - map.push(...keyValues(obj[key])); + map.push(...getKeyValues(obj[key], keysUpToValue)); } } } diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index ee08f769..181c8eea 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -4,7 +4,7 @@ import { isEqual } from '@ember/utils'; import Change from 'ember-changeset/-private/change'; -import keyValues from 'ember-changeset/-private/key-values'; +import { getKeyValues } from 'ember-changeset/-private/get-key-values'; import { notifierForEvent } from 'ember-changeset/-private/evented'; import Err from 'ember-changeset/-private/err'; import normalizeObject from 'ember-changeset/-private/normalize-object'; @@ -141,11 +141,15 @@ export class BufferedChangeset implements IChangeset { }, Object.create(null)); } + /** + * @property changes + * @type {Array} + */ get changes() { let obj = this[CHANGES]; // [{ key, value }, ...] - return keyValues(obj); + return getKeyValues(obj); } // TODO: iterate and find all leaf errors @@ -183,8 +187,12 @@ export class BufferedChangeset implements IChangeset { return this[CONTENT]; } + /** + * @property isValud + * @type {Array} + */ get isValid() { - return keyValues(this[ERRORS]).length === 0; + return getKeyValues(this[ERRORS]).length === 0; } get isPristine() { return Object.keys(this[CHANGES]).length === 0; From 5c509f41df8cb4cb4c90ade8eda0ed53753f115b Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 11:48:01 -0700 Subject: [PATCH 33/75] address notifier feedback --- addon/-private/merge-deep.ts | 11 +++++++---- addon/-private/normalize-object.ts | 16 ++++++++++++++-- addon/-private/notifier.ts | 13 ++++++------- addon/-private/validated-changeset.ts | 20 ++++++++------------ 4 files changed, 35 insertions(+), 25 deletions(-) diff --git a/addon/-private/merge-deep.ts b/addon/-private/merge-deep.ts index a0c4e164..ad364cfa 100644 --- a/addon/-private/merge-deep.ts +++ b/addon/-private/merge-deep.ts @@ -73,10 +73,10 @@ function buildPathToValue(source: any, options: Options): void { } /** - * `source` will always have a leaf key `value` with the proeprty we want to set + * `source` will always have a leaf key `value` with the property we want to set * @method mergeObject */ -function mergeObject(target: any, source: any, options: Options) { +function mergeObject(target: any, source: any, options: Options): any { getKeys(source).forEach(key => { // proto poisoning. So can set by nested key path 'person.name' if (propertyIsUnsafe(target, key)) { @@ -111,13 +111,16 @@ function mergeObject(target: any, source: any, options: Options) { * goal is to mutate target with source's properties, ensuring we dont encounter * pitfalls of { ..., ... } spread syntax overwriting keys on objects that we merged * + * This is also adjusted for Ember peculiarities. Specifically `options.setPath` will allows us + * to handle properties on Proxy objects (that aren't the target's own property) + * * @method mergeDeep * @param target * @param source */ export default function mergeDeep(target: any, source: any, options: Options = { safeGet: undefined, safeSet: undefined }): object | [any] { - options['safeGet'] = options.safeGet || function(obj: any, key: string): any { return obj[key] }; - options['safeSet'] = options.safeSet; + options.safeGet = options.safeGet || function(obj: any, key: string): any { return obj[key] }; + options.safeSet = options.safeSet; let sourceIsArray = Array.isArray(source); let targetIsArray = Array.isArray(target); let sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; diff --git a/addon/-private/normalize-object.ts b/addon/-private/normalize-object.ts index c1b6fa51..ec0fd10b 100644 --- a/addon/-private/normalize-object.ts +++ b/addon/-private/normalize-object.ts @@ -1,7 +1,19 @@ import isObject from '../utils/is-object'; /** - * traverse through target and unset `value` from leaf key + * traverse through target and unset `value` from leaf key so can access normally + * { + * name: Change { + * value: 'Charles' + * } + * } + * + * to + * + * { + * name: 'Charles' + * } + * * Shallow copy here is fine because we are swapping out the leaf nested object * rather than mutating a property in something with reference * @@ -17,7 +29,7 @@ export default function normalizeObject(target: } if (obj[key] && isObject(obj[key])) { - if (Object.prototype.hasOwnProperty.apply(obj[key], ['value'])) { + if (Object.prototype.hasOwnProperty.call(obj[key], 'value')) { obj[key] = obj[key].value; } else { obj[key] = normalizeObject(obj[key]); diff --git a/addon/-private/notifier.ts b/addon/-private/notifier.ts index ec33b2c2..baebad35 100644 --- a/addon/-private/notifier.ts +++ b/addon/-private/notifier.ts @@ -1,19 +1,18 @@ // this statefull class holds and notifies -import { INotifier } from '../types/evented'; -export default class Notifier implements INotifier { - listeners: Function[] +export default class Notifier{ + listeners: ((...args: T) => void)[] constructor() { this.listeners = []; } - addListener(callback: Function) { + addListener(callback: (...args: T) => void) { this.listeners.push(callback); return () => this.removeListener(callback); } - removeListener(callback: Function) { + removeListener(callback: (...args: T) => void) { this.listeners; for (let i = 0; i < this.listeners.length; i++) { @@ -24,7 +23,7 @@ export default class Notifier implements INotifier { } } - trigger(...args: any[]) { - this.listeners.slice(0).forEach(callback => callback(...args)); + trigger(...args: T) { + this.listeners.forEach(callback => callback(...args)); } } diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 181c8eea..d197bcb1 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -54,14 +54,10 @@ const defaultOptions = { skipValidate: false }; export class BufferedChangeset implements IChangeset { constructor( obj: object, - validateFn: ValidatorAction = defaultValidatorFn, - validationMap: ValidatorMap = {}, + public validateFn: ValidatorAction = defaultValidatorFn, + public validationMap: ValidatorMap = {}, options: Config = {} ) { - this.obj = obj; - this.validateFn = validateFn; - this.validationMap = validationMap; - this[CONTENT] = obj; this[CHANGES] = {}; this[ERRORS] = {}; @@ -301,7 +297,7 @@ export class BufferedChangeset implements IChangeset { * @method save * @param {Object} options optional object to pass to content save method */ - save( + async save( options: object ): Promise { let content: Content = this[CONTENT]; @@ -320,10 +316,10 @@ export class BufferedChangeset implements IChangeset { } } - return Promise.resolve(savePromise).then((result) => { - this.rollback(); - return result; - }); + const result = await savePromise; + + this.rollback(); + return result; } /** @@ -608,7 +604,7 @@ export class BufferedChangeset implements IChangeset { * * @method isValidating */ - isValidating(key: string | void): boolean { + isValidating(key?: string | void): boolean { let runningValidations: RunningValidations = this[RUNNING_VALIDATIONS]; let ks: string[] = keys(runningValidations); if (key) { From ae1afb7a1bc9841cac37d96b9c48b40171533a0e Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 20:37:52 -0700 Subject: [PATCH 34/75] fix merge-deep to be more recursive like --- addon/-private/merge-deep.ts | 19 ++++++++----------- addon/-private/set-deep.ts | 6 +++--- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/addon/-private/merge-deep.ts b/addon/-private/merge-deep.ts index ad364cfa..3725e7d3 100644 --- a/addon/-private/merge-deep.ts +++ b/addon/-private/merge-deep.ts @@ -44,44 +44,43 @@ function propertyIsUnsafe(target: any, key: string): Boolean { && Object.propertyIsEnumerable.call(target, key)); // and also unsafe if they're nonenumerable. } -let kv: { [k: string]: any } = {}; -let possibleKeys: string[] = []; - /** * DFS - traverse depth first until find object with `value`. Then go back up tree and try on next key * need to exhaust all possible avenues. * * @method buildPathToValue */ -function buildPathToValue(source: any, options: Options): void { +function buildPathToValue(source: any, options: Options, kv: Record, possibleKeys: string[]): Record { Object.keys(source).forEach((key: string): void => { let possible = source[key]; if (possible && possible.hasOwnProperty('value')) { possibleKeys.push(key); kv[possibleKeys.join('.')] = possible.value; - possibleKeys = []; + // reset return; } if (typeof possible === 'object') { possibleKeys.push(key); - buildPathToValue(possible, options); - } else { - possibleKeys = []; + buildPathToValue(possible, options, kv, possibleKeys); } }); + + return kv; } /** * `source` will always have a leaf key `value` with the property we want to set + * * @method mergeObject */ function mergeObject(target: any, source: any, options: Options): any { getKeys(source).forEach(key => { // proto poisoning. So can set by nested key path 'person.name' if (propertyIsUnsafe(target, key)) { + // if safeSet, we will find keys leading up to value and set if (options.safeSet) { - buildPathToValue(source, options); + const kv: Record = buildPathToValue(source, options, {}, []); if (Object.keys(kv).length > 0) { // we found some keys! for (key in kv) { @@ -89,8 +88,6 @@ function mergeObject(target: any, source: any, options: Options): any { options.safeSet(target, key, val); } } - - kv = {}; } return; diff --git a/addon/-private/set-deep.ts b/addon/-private/set-deep.ts index 6995e3e7..ef553b29 100644 --- a/addon/-private/set-deep.ts +++ b/addon/-private/set-deep.ts @@ -3,13 +3,13 @@ import Change from './change'; * TODO: consider * https://github.com/emberjs/ember.js/blob/822452c4432620fc67a777aba3b150098fd6812d/packages/%40ember/-internals/metal/lib/property_set.ts * + * Handles both single path or nested string paths ('person.name') + * * @method setDeep - * @param target - * @param path - * @param value */ export default function setDeep(target: any, path: string, value: unknown): any { const keys = split(path).filter(isValidKey); + // We will mutate target and through complex reference, we will mutate the orig let orig = target; if (keys.length === 1) { From 42a22d2a279e26f9bbccaf7cb5330157b6277b18 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 20:38:06 -0700 Subject: [PATCH 35/75] addError overload --- addon/-private/validated-changeset.ts | 5 +---- addon/index.ts | 7 +++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index d197bcb1..57b24dff 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -471,10 +471,7 @@ export class BufferedChangeset implements IChangeset { * * @method addError */ - addError ( - key: string, - error: IErr | ValidationErr - ): IErr | ValidationErr { + addError(key: string, error: IErr | ValidationErr) { // Construct new `Err` instance. let newError; if (isObject(error) && !Array.isArray(error)) { diff --git a/addon/index.ts b/addon/index.ts index d8ac6d28..17abb641 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -40,10 +40,9 @@ class EmberChangeset extends BufferedChangeset { * * @method addError */ - addError ( - key: string, - error: IErr | ValidationErr - ): IErr | ValidationErr { + addError(key: string, error: IErr): IErr + addError(key: string, error: ValidationErr): ValidationErr + addError(key: string, error: IErr | ValidationErr) { super.addError(key, error); notifyPropertyChange(this, ERRORS); From e5ed01bb871a5e9e3b5cb76edde0a775694f4c3c Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 20:38:23 -0700 Subject: [PATCH 36/75] use Record for get-deep --- addon/-private/get-deep.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/addon/-private/get-deep.ts b/addon/-private/get-deep.ts index 3ff88ad2..a4966458 100644 --- a/addon/-private/get-deep.ts +++ b/addon/-private/get-deep.ts @@ -1,5 +1,10 @@ -export default function getDeep(root: T, path: string | string[]): any { - let obj: any = root; +/** + * Handles both single key or nested string keys ('person.name') + * + * @method getDeep + */ +export default function getDeep>(root: T, path: string | string[]): any { + let obj: T = root; if (path.indexOf('.') === -1) { return obj[path as string]; From d18b6fb65d4a0d7cc63fb094365440116ce00069 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 21:19:35 -0700 Subject: [PATCH 37/75] add type guard --- addon/-private/validated-changeset.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 57b24dff..ed1bbd78 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -474,10 +474,12 @@ export class BufferedChangeset implements IChangeset { addError(key: string, error: IErr | ValidationErr) { // Construct new `Err` instance. let newError; - if (isObject(error) && !Array.isArray(error)) { + + const isIErr = (error: unknown): error is IErr => isObject(error) && !Array.isArray(error); + if (isIErr(error)) { assert('Error must have value.', error.hasOwnProperty('value')); assert('Error must have validation.', error.hasOwnProperty('validation')); - newError = new Err((>error).value, (>error).validation); + newError = new Err(error.value, error.validation); } else { let value = this[key]; newError = new Err(value, (error)); From ffc538a9a9a02c347ce9ff35d68e808bb41a7899 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 21:30:35 -0700 Subject: [PATCH 38/75] return early if value on target --- addon/-private/normalize-object.ts | 4 ++++ addon/utils/assign.ts | 1 + 2 files changed, 5 insertions(+) diff --git a/addon/-private/normalize-object.ts b/addon/-private/normalize-object.ts index ec0fd10b..858e1f28 100644 --- a/addon/-private/normalize-object.ts +++ b/addon/-private/normalize-object.ts @@ -21,6 +21,10 @@ import isObject from '../utils/is-object'; * @param target */ export default function normalizeObject(target: T): T { + if ('value' in target) { + return target.value + } + let obj = { ...target }; for (let key in obj) { diff --git a/addon/utils/assign.ts b/addon/utils/assign.ts index 6eee0f75..4f9e9017 100644 --- a/addon/utils/assign.ts +++ b/addon/utils/assign.ts @@ -1,3 +1,4 @@ +// keep getters and setters export default function pureAssign(...objects: object[]): object { return objects.reduce((acc, obj) => { return Object.defineProperties(acc, Object.getOwnPropertyDescriptors(obj)); From 9be116dd94f41288dc5ed7e657dc44f803d593a5 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 21:33:27 -0700 Subject: [PATCH 39/75] move utils to utils folder --- addon/-private/validated-changeset.ts | 10 +++++----- addon/index.ts | 2 +- addon/{-private => utils}/get-deep.ts | 0 addon/{-private => utils}/get-key-values.ts | 2 +- addon/{-private => utils}/merge-deep.ts | 0 addon/utils/merge-nested.ts | 2 +- addon/{-private => utils}/normalize-object.ts | 2 +- addon/{-private => utils}/set-deep.ts | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) rename addon/{-private => utils}/get-deep.ts (100%) rename addon/{-private => utils}/get-key-values.ts (94%) rename addon/{-private => utils}/merge-deep.ts (100%) rename addon/{-private => utils}/normalize-object.ts (95%) rename addon/{-private => utils}/set-deep.ts (97%) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index ed1bbd78..0dfa63e1 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -4,10 +4,10 @@ import { isEqual } from '@ember/utils'; import Change from 'ember-changeset/-private/change'; -import { getKeyValues } from 'ember-changeset/-private/get-key-values'; +import { getKeyValues } from 'ember-changeset/utils/get-key-values'; import { notifierForEvent } from 'ember-changeset/-private/evented'; import Err from 'ember-changeset/-private/err'; -import normalizeObject from 'ember-changeset/-private/normalize-object'; +import normalizeObject from 'ember-changeset/utils/normalize-object'; import pureAssign from 'ember-changeset/utils/assign'; import isChangeset, { CHANGESET } from 'ember-changeset/utils/is-changeset'; import isObject from 'ember-changeset/utils/is-object'; @@ -16,9 +16,9 @@ import mergeNested from 'ember-changeset/utils/merge-nested'; import objectWithout from 'ember-changeset/utils/object-without'; import take from 'ember-changeset/utils/take'; import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; -import mergeDeep from 'ember-changeset/-private/merge-deep'; -import setDeep from 'ember-changeset/-private/set-deep'; -import getDeep from 'ember-changeset/-private/get-deep'; +import mergeDeep from 'ember-changeset/utils/merge-deep'; +import setDeep from 'ember-changeset/utils/set-deep'; +import getDeep from 'ember-changeset/utils/get-deep'; import { Changes, Config, diff --git a/addon/index.ts b/addon/index.ts index 17abb641..2fb15b84 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -3,7 +3,7 @@ import { BufferedChangeset } from './-private/validated-changeset'; import { notifyPropertyChange } from '@ember/object'; import { tracked } from '@glimmer/tracking'; import { get as safeGet, set as safeSet } from '@ember/object'; -import mergeDeep from 'ember-changeset/-private/merge-deep'; +import mergeDeep from 'ember-changeset/utils/merge-deep'; import { Config, Changes, diff --git a/addon/-private/get-deep.ts b/addon/utils/get-deep.ts similarity index 100% rename from addon/-private/get-deep.ts rename to addon/utils/get-deep.ts diff --git a/addon/-private/get-key-values.ts b/addon/utils/get-key-values.ts similarity index 94% rename from addon/-private/get-key-values.ts rename to addon/utils/get-key-values.ts index a258f784..a435aa37 100644 --- a/addon/-private/get-key-values.ts +++ b/addon/utils/get-key-values.ts @@ -1,4 +1,4 @@ -import isObject from '../utils/is-object'; +import isObject from './is-object'; /** * traverse through target and return leaf nodes with `value` property and key as 'person.name' diff --git a/addon/-private/merge-deep.ts b/addon/utils/merge-deep.ts similarity index 100% rename from addon/-private/merge-deep.ts rename to addon/utils/merge-deep.ts diff --git a/addon/utils/merge-nested.ts b/addon/utils/merge-nested.ts index daf0da66..3580d3b5 100644 --- a/addon/utils/merge-nested.ts +++ b/addon/utils/merge-nested.ts @@ -1,4 +1,4 @@ -import setDeep from '../-private/set-deep'; +import setDeep from './set-deep'; const { keys } = Object; diff --git a/addon/-private/normalize-object.ts b/addon/utils/normalize-object.ts similarity index 95% rename from addon/-private/normalize-object.ts rename to addon/utils/normalize-object.ts index 858e1f28..14f6f5e4 100644 --- a/addon/-private/normalize-object.ts +++ b/addon/utils/normalize-object.ts @@ -1,4 +1,4 @@ -import isObject from '../utils/is-object'; +import isObject from './is-object'; /** * traverse through target and unset `value` from leaf key so can access normally diff --git a/addon/-private/set-deep.ts b/addon/utils/set-deep.ts similarity index 97% rename from addon/-private/set-deep.ts rename to addon/utils/set-deep.ts index ef553b29..40b320a7 100644 --- a/addon/-private/set-deep.ts +++ b/addon/utils/set-deep.ts @@ -1,4 +1,4 @@ -import Change from './change'; +import Change from '../-private/change'; /** * TODO: consider * https://github.com/emberjs/ember.js/blob/822452c4432620fc67a777aba3b150098fd6812d/packages/%40ember/-internals/metal/lib/property_set.ts From 8bc34b6ca7df2a16d67e829445b793193b6f0199 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 21:44:03 -0700 Subject: [PATCH 40/75] add some tests around normalize obj and pure-assign --- tests/unit/utils/assign-test.js | 26 ++++++++++++++++++++++- tests/unit/utils/normalize-object-test.js | 25 ++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 tests/unit/utils/normalize-object-test.js diff --git a/tests/unit/utils/assign-test.js b/tests/unit/utils/assign-test.js index 13b7582c..80466cea 100644 --- a/tests/unit/utils/assign-test.js +++ b/tests/unit/utils/assign-test.js @@ -2,7 +2,7 @@ import pureAssign from 'ember-changeset/utils/assign'; import { module, test } from 'qunit'; module('Unit | Utility | assign', function() { - test(`it does not mutate destination or source objects`, async function(assert) { + test('it does not mutate destination or source objects', async function(assert) { let foo = { name: 'foo' }; let bar = { name: 'bar' }; let result = pureAssign(foo, bar, { test: 1 }); @@ -11,5 +11,29 @@ module('Unit | Utility | assign', function() { assert.deepEqual(foo, { name: 'foo' }, 'should not mutate destination'); assert.deepEqual(bar, { name: 'bar' }, 'should not mutate source'); }); + + test('it keeps setter', async function(assert) { + class Foo { + name = 'foo' + get nick() { + return this._nick; + } + + set nick(val) { + this._nick = val; + } + } + let foo = new Foo(); + let bar = { name: 'bar' }; + let result = pureAssign(foo, bar, { test: 1 }); + + assert.deepEqual(result, { name: 'bar', test: 1 }, 'should assign object'); + assert.deepEqual(foo.name, 'foo', 'should not mutate destination'); + assert.deepEqual(bar, { name: 'bar' }, 'should not mutate source'); + + result.nick = 'dood'; + + assert.equal(result.nick, 'dood', 'should not mutate source'); + }); }); diff --git a/tests/unit/utils/normalize-object-test.js b/tests/unit/utils/normalize-object-test.js new file mode 100644 index 00000000..f00a13ef --- /dev/null +++ b/tests/unit/utils/normalize-object-test.js @@ -0,0 +1,25 @@ +import normalizeObject from 'ember-changeset/utils/normalize-object'; +import { module, test } from 'ember-qunit'; + +module('Unit | Utility | normalize object', () => { + test('it returns value', async function(assert) { + let objA = { value: 'Ivan' }; + let value = normalizeObject(objA); + + assert.equal(value, 'Ivan', 'result has value'); + }); + + test('it returns value from nested', async function(assert) { + let objA = { name: { value: 'Ivan' } }; + let value = normalizeObject(objA); + + assert.deepEqual(value, { name: 'Ivan' }, 'result has value'); + }); + + test('it returns multiple values from nested', async function(assert) { + let objA = { name: { value: 'Ivan' }, foo: { value: 'bar' } }; + let value = normalizeObject(objA); + + assert.deepEqual(value, { name: 'Ivan', foo: 'bar' }, 'result has value'); + }); +}); From ca58df360ab2d5be983fd1d4a7fe632f4e3fed9b Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 21:48:26 -0700 Subject: [PATCH 41/75] add get deep tests --- tests/unit/utils/get-deep-test.js | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 tests/unit/utils/get-deep-test.js diff --git a/tests/unit/utils/get-deep-test.js b/tests/unit/utils/get-deep-test.js new file mode 100644 index 00000000..59eacce6 --- /dev/null +++ b/tests/unit/utils/get-deep-test.js @@ -0,0 +1,32 @@ +import getDeep from 'ember-changeset/utils/get-deep'; +import { module, test } from 'ember-qunit'; + +module('Unit | Utility | get deep', () => { + test('it returns value', async function(assert) { + let objA = { other: 'Ivan' }; + let value = getDeep(objA, 'foo'); + + assert.equal(value, undefined, 'result has value'); + }); + + test('it returns value from nested', async function(assert) { + let objA = { name: { other: 'Ivan' } }; + let value = getDeep(objA, 'name'); + + assert.deepEqual(value, { other: 'Ivan' }, 'result has value'); + }); + + test('it returns value from deep nested', async function(assert) { + let objA = { name: { other: 'Ivan' } }; + let value = getDeep(objA, 'name.other'); + + assert.deepEqual(value, 'Ivan', 'result has value'); + }); + + test('it returns multiple values from nested', async function(assert) { + let objA = { name: { other: 'Ivan' }, foo: { other: 'bar' } }; + let value = getDeep(objA, 'name'); + + assert.deepEqual(value, { other: 'Ivan' }, 'result has value'); + }); +}); From 75b2670d29b6c599da180df0b25239b2aadfeffc Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 21:52:26 -0700 Subject: [PATCH 42/75] add set deep test --- tests/unit/utils/set-deep-test.js | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 tests/unit/utils/set-deep-test.js diff --git a/tests/unit/utils/set-deep-test.js b/tests/unit/utils/set-deep-test.js new file mode 100644 index 00000000..56c567e5 --- /dev/null +++ b/tests/unit/utils/set-deep-test.js @@ -0,0 +1,39 @@ +import setDeep from 'ember-changeset/utils/set-deep'; +import { module, test } from 'ember-qunit'; + +module('Unit | Utility | set deep', () => { + test('it sets value', async function(assert) { + let objA = { other: 'Ivan' }; + let value = setDeep(objA, 'foo', 'bar'); + + assert.deepEqual(value, { other: 'Ivan', foo: 'bar'}, 'it sets value'); + }); + + test('it sets deeper', async function(assert) { + let objA = { other: 'Ivan' }; + let value = setDeep(objA, 'other.nick', 'bar'); + + assert.deepEqual(value, { other: { nick: 'bar' } }, 'sets deeper'); + }); + + test('it overrides leaf key', async function(assert) { + let objA = { name: { other: 'Ivan' } }; + let value = setDeep(objA, 'name', 'foo'); + + assert.deepEqual(value, { name: 'foo' }, 'result has value'); + }); + + test('it handles nested key', async function(assert) { + let objA = { name: { other: 'Ivan' } }; + let value = setDeep(objA, 'name.other', 'foo'); + + assert.deepEqual(value, { name: { other: 'foo' }}, 'result has value'); + }); + + test('it works with multiple values', async function(assert) { + let objA = { name: { other: 'Ivan' }, foo: { other: 'bar' } }; + let value = setDeep(objA, 'name', 'zoo'); + + assert.deepEqual(value, { foo: { other: 'bar' }, name: 'zoo' }, 'result has value'); + }); +}); From c36b81fc8977a64d27535a533dde954f4c073fab Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 21:55:00 -0700 Subject: [PATCH 43/75] fix travis --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 44e2146e..f566afc4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,8 +38,7 @@ jobs: install: - yarn install --non-interactive script: - - yarn lint:hbs - - yarn lint:js + - yarn lint - yarn test - name: "Floating Dependencies" From 20b3438877e6cb19e01e5eb26f78f933e2da6715 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Fri, 22 Nov 2019 21:55:33 -0700 Subject: [PATCH 44/75] ts ignore --- addon/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/addon/index.ts b/addon/index.ts index 2fb15b84..4ea2342c 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -1,6 +1,7 @@ import { assert } from '@ember/debug'; import { BufferedChangeset } from './-private/validated-changeset'; import { notifyPropertyChange } from '@ember/object'; +// @ts-ignore import { tracked } from '@glimmer/tracking'; import { get as safeGet, set as safeSet } from '@ember/object'; import mergeDeep from 'ember-changeset/utils/merge-deep'; From e4750ed65e112382ca6bde53a37c9091228ad2b7 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 07:50:45 -0700 Subject: [PATCH 45/75] ember tsc 2.0 --- package.json | 17 +- tsconfig.json | 1 - types/global.d.ts | 6 + yarn.lock | 1247 ++++++++++++++++++--------------------------- 4 files changed, 515 insertions(+), 756 deletions(-) create mode 100644 types/global.d.ts diff --git a/package.json b/package.json index 795fdb31..8fb3b723 100644 --- a/package.json +++ b/package.json @@ -27,40 +27,41 @@ "bugs": "https://github.com/poteto/ember-changeset/issues", "homepage": "https://github.com/poteto/ember-changeset", "dependencies": { - "ember-cli-babel": "^7.11.1", + "ember-cli-typescript": "2.0.2", "ember-deep-set": "^0.2.0" }, "devDependencies": { "@ember/optional-features": "^1.0.0", - "babel-eslint": "^10.0.3", "@types/ember": "^3.1.1", "@types/ember-data": "^3.1.9", "@types/ember-qunit": "^3.4.7", "@types/ember-test-helpers": "^1.0.6", "@types/ember-testing-helpers": "^0.0.3", "@types/ember__polyfills": "^3.0.3", - "@types/ember__test-helpers": "^0.7.6", - "@types/qunit": "^2.5.3", - "@types/rsvp": "^4.0.2", + "@types/ember__test-helpers": "^0.7.9", + "@types/qunit": "^2.9.0", + "@types/rsvp": "^4.0.3", + "babel-eslint": "^10.0.3", "broccoli-asset-rev": "^3.0.0", "ember-auto-import": "^1.5.2", "ember-cli": "~3.14.0", + "ember-cli-babel": "^7.13.0", "ember-cli-dependency-checker": "^2.0.0", "ember-cli-eslint": "^5.1.0", "ember-cli-htmlbars": "^4.0.5", "ember-cli-htmlbars-inline-precompile": "^3.0.0", "ember-cli-inject-live-reload": "^2.0.1", - "ember-qunit": "^4.5.1", "ember-cli-release": "^1.0.0-beta.2", "ember-cli-shims": "^1.2.0", "ember-cli-sri": "^2.1.1", - "ember-cli-typescript": "^1.5.0", + "ember-cli-typescript-blueprints": "^3.0.0", "ember-cli-uglify": "^3.0.0", "ember-data": "^3.8.0", "ember-disable-prototype-extensions": "^1.1.3", "ember-export-application-global": "^2.0.0", "ember-load-initializers": "^2.1.0", "ember-maybe-import-regenerator": "^0.1.6", + "ember-qunit": "^4.5.1", "ember-resolver": "^5.3.0", "ember-source": "~3.14.1", "ember-source-channel-url": "^2.0.1", @@ -68,7 +69,7 @@ "eslint-plugin-ember": "^7.1.0", "eslint-plugin-node": "^10.0.0", "loader.js": "^4.7.0", - "typescript": "^3.6.4" + "typescript": "^3.7.2" }, "engines": { "node": "8.* || >= 10.*" diff --git a/tsconfig.json b/tsconfig.json index 8a6d944e..3bfe8c8e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,6 @@ "allowJs": true, "moduleResolution": "node", "allowSyntheticDefaultImports": true, - "experimentalDecorators": true, "noImplicitAny": true, "noImplicitThis": true, "alwaysStrict": true, diff --git a/types/global.d.ts b/types/global.d.ts new file mode 100644 index 00000000..88fb0324 --- /dev/null +++ b/types/global.d.ts @@ -0,0 +1,6 @@ +// Types for compiled templates +declare module 'ember-changeset/templates/*' { + import { TemplateFactory } from 'htmlbars-inline-precompile'; + const tmpl: TemplateFactory; + export default tmpl; +} diff --git a/yarn.lock b/yarn.lock index cb471b13..b6d8d91e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,38 +9,18 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.0.0", "@babel/core@^7.3.3", "@babel/core@^7.3.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" - integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== +"@babel/core@^7.1.6", "@babel/core@^7.2.2", "@babel/core@^7.3.3", "@babel/core@^7.3.4", "@babel/core@^7.6.2", "@babel/core@^7.7.0": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.4.tgz#37e864532200cb6b50ee9a4045f5f817840166ab" + integrity sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.4" - "@babel/helpers" "^7.6.2" - "@babel/parser" "^7.6.4" - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.3" - "@babel/types" "^7.6.3" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.1.6", "@babel/core@^7.2.2", "@babel/core@^7.6.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.2.tgz#ea5b99693bcfc058116f42fa1dd54da412b29d91" - integrity sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.2" - "@babel/helpers" "^7.7.0" - "@babel/parser" "^7.7.2" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.7.2" + "@babel/generator" "^7.7.4" + "@babel/helpers" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" convert-source-map "^1.7.0" debug "^4.1.0" json5 "^2.1.0" @@ -49,150 +29,132 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.6.3", "@babel/generator@^7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" - integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== - dependencies: - "@babel/types" "^7.6.3" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/generator@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.2.tgz#2f4852d04131a5e17ea4f6645488b5da66ebf3af" - integrity sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ== +"@babel/generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" + integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== dependencies: - "@babel/types" "^7.7.2" + "@babel/types" "^7.7.4" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== +"@babel/helper-annotate-as-pure@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" + integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" + integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-explode-assignable-expression" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== +"@babel/helper-call-delegate@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" + integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz#769711acca889be371e9bc2eb68641d55218021f" - integrity sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng== +"@babel/helper-create-class-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" + integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" - -"@babel/helper-define-map@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" - integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.5.5" - lodash "^4.17.13" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== +"@babel/helper-create-regexp-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" + integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== +"@babel/helper-define-map@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" + integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" -"@babel/helper-function-name@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz#44a5ad151cfff8ed2599c91682dda2ec2c8430a3" - integrity sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q== +"@babel/helper-explode-assignable-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" + integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== dependencies: - "@babel/helper-get-function-arity" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/types" "^7.7.0" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@babel/helper-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" + integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== dependencies: - "@babel/types" "^7.0.0" + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-get-function-arity@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz#c604886bc97287a1d1398092bc666bc3d7d7aa2d" - integrity sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw== +"@babel/helper-get-function-arity@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" + integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== dependencies: - "@babel/types" "^7.7.0" + "@babel/types" "^7.7.4" -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== +"@babel/helper-hoist-variables@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" + integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.7.4" -"@babel/helper-member-expression-to-functions@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" - integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== +"@babel/helper-member-expression-to-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" + integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.7.4" -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" + integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" - integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== +"@babel/helper-module-transforms@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.4.tgz#8d7cdb1e1f8ea3d8c38b067345924ac4f8e0879a" + integrity sha512-ehGBu4mXrhs0FxAqN8tWkzF8GSIGAiEumu4ONZ/hD9M88uHcD+Yu2ttKfOCgwzoesJOJrtQh7trI5YPbRtMmnA== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.5.5" + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-simple-access" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/helper-optimise-call-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" + integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" @@ -206,76 +168,60 @@ dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" - integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-split-export-declaration@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz#1365e74ea6c614deeb56ebffabd71006a0eb2300" - integrity sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" - integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== - dependencies: - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.2" - "@babel/types" "^7.6.0" - -"@babel/helpers@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.0.tgz#359bb5ac3b4726f7c1fde0ec75f64b3f4275d60b" - integrity sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g== - dependencies: - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" +"@babel/helper-remap-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" + integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-wrap-function" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-replace-supers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" + integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-simple-access@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" + integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== + dependencies: + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-split-export-declaration@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" + integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-wrap-function@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" + integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helpers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" + integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== + dependencies: + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/highlight@^7.0.0": version "7.5.0" @@ -286,127 +232,123 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.3.4": - version "7.7.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.3.tgz#5fad457c2529de476a248f75b0f090b3060af043" - integrity sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A== +"@babel/parser@^7.0.0", "@babel/parser@^7.3.4", "@babel/parser@^7.4.5", "@babel/parser@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb" + integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g== -"@babel/parser@^7.4.5", "@babel/parser@^7.7.0", "@babel/parser@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.2.tgz#ea8334dc77416bfd9473eb470fd00d8245b3943b" - integrity sha512-DDaR5e0g4ZTb9aP7cpSZLkACEBdoLGwJDWgHtBhrGX7Q1RjhdoMOfexICj5cqTAtpowjGQWfcvfnQG7G2kAB5w== - -"@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" - integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== +"@babel/plugin-proposal-async-generator-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" + integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== +"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.7.0": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" + integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw== dependencies: + "@babel/helper-create-class-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" -"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.3.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" - integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== +"@babel/plugin-proposal-decorators@^7.7.0": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.7.4.tgz#58c1e21d21ea12f9f5f0a757e46e687b94a7ab2b" + integrity sha512-GftcVDcLCwVdzKmwOBDjATd548+IE+mBo7ttgatqNDR7VG7GqIuZPtRWlMLHbhTXhcnFZiGER8iIYl1n/imtsg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" + "@babel/helper-create-class-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-decorators" "^7.7.4" -"@babel/plugin-proposal-decorators@^7.3.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.6.0.tgz#6659d2572a17d70abd68123e89a12a43d90aa30c" - integrity sha512-ZSyYw9trQI50sES6YxREXKu+4b7MAg6Qx2cvyDDYjP2Hpzd3FleOUwC9cqn1+za8d0A2ZU8SHujxFao956efUg== +"@babel/plugin-proposal-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" + integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.6.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-decorators" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" -"@babel/plugin-proposal-dynamic-import@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" - integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== +"@babel/plugin-proposal-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" + integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.7.4" -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== +"@babel/plugin-proposal-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" + integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" -"@babel/plugin-proposal-object-rest-spread@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" - integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== +"@babel/plugin-proposal-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" + integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== +"@babel/plugin-proposal-unicode-property-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb" + integrity sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" -"@babel/plugin-proposal-unicode-property-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802" - integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw== +"@babel/plugin-syntax-async-generators@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" + integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== +"@babel/plugin-syntax-decorators@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.7.4.tgz#3c91cfee2a111663ff3ac21b851140f5a52a4e0b" + integrity sha512-0oNLWNH4k5ZbBVfAwiTU53rKFWIeTh6ZlaWOXWJc4ywxs0tjz5fc3uZ6jKAnZSxN98eXVgg7bJIuzjX+3SXY+A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-decorators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" - integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA== +"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" + integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-syntax-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" + integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== +"@babel/plugin-syntax-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" + integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@babel/plugin-syntax-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" + integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== +"@babel/plugin-syntax-top-level-await@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" + integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -417,165 +359,164 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-transform-arrow-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" + integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" - integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== +"@babel/plugin-transform-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" + integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== +"@babel/plugin-transform-block-scoped-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" + integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.5.5", "@babel/plugin-transform-block-scoping@^7.6.0", "@babel/plugin-transform-block-scoping@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" - integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== +"@babel/plugin-transform-block-scoping@^7.5.5", "@babel/plugin-transform-block-scoping@^7.6.0", "@babel/plugin-transform-block-scoping@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" + integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" - integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== +"@babel/plugin-transform-classes@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" + integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-define-map" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/plugin-transform-computed-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" + integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" - integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== +"@babel/plugin-transform-destructuring@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" + integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9" - integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA== +"@babel/plugin-transform-dotall-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz#f7ccda61118c5b7a2599a72d5e3210884a021e96" + integrity sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" -"@babel/plugin-transform-duplicate-keys@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" - integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== +"@babel/plugin-transform-duplicate-keys@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" + integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== +"@babel/plugin-transform-exponentiation-operator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" + integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== +"@babel/plugin-transform-for-of@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" + integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== +"@babel/plugin-transform-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" + integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== dependencies: - "@babel/helper-function-name" "^7.1.0" + "@babel/helper-function-name" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@babel/plugin-transform-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" + integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== +"@babel/plugin-transform-member-expression-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" + integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-amd@^7.0.0", "@babel/plugin-transform-modules-amd@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" - integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== +"@babel/plugin-transform-modules-amd@^7.5.0", "@babel/plugin-transform-modules-amd@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.4.tgz#276b3845ca2b228f2995e453adc2e6f54d72fb71" + integrity sha512-/542/5LNA18YDtg1F+QHvvUSlxdvjZoD/aldQwkq+E3WCkbEjNSN9zdrOXaSlfg3IfGi22ijzecklF/A7kVZFQ== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" - integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== +"@babel/plugin-transform-modules-commonjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.4.tgz#bee4386e550446343dd52a571eda47851ff857a3" + integrity sha512-k8iVS7Jhc367IcNF53KCwIXtKAH7czev866ThsTgy8CwlXjnKZna2VHwChglzLleYrcHz1eQEIJlGRQxB53nqA== dependencies: - "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-simple-access" "^7.7.4" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" - integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== +"@babel/plugin-transform-modules-systemjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" + integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-hoist-variables" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== +"@babel/plugin-transform-modules-umd@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" + integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz#aaa6e409dd4fb2e50b6e2a91f7e3a3149dbce0cf" - integrity sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" + integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== dependencies: - regexpu-core "^4.6.0" + "@babel/helper-create-regexp-features-plugin" "^7.7.4" -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== +"@babel/plugin-transform-new-target@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" + integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -586,88 +527,88 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-object-super@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" - integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== +"@babel/plugin-transform-object-super@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" + integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-replace-supers" "^7.7.4" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== +"@babel/plugin-transform-parameters@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce" + integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-call-delegate" "^7.7.4" + "@babel/helper-get-function-arity" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== +"@babel/plugin-transform-property-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" + integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== +"@babel/plugin-transform-regenerator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.4.tgz#d18eac0312a70152d7d914cbed2dc3999601cfc0" + integrity sha512-e7MWl5UJvmPEwFJTwkBlPmqixCtr9yAASBqff4ggXTNicZiwbF8Eefzm6NVgfiBp7JdAGItecnctKTgH44q2Jw== dependencies: regenerator-transform "^0.14.0" -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== +"@babel/plugin-transform-reserved-words@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" + integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-runtime@^7.2.0": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.2.tgz#2669f67c1fae0ae8d8bf696e4263ad52cb98b6f8" - integrity sha512-cqULw/QB4yl73cS5Y0TZlQSjDvNkzDbu0FurTZyHlJpWE5T3PCMdnyV+xXoH1opr1ldyHODe3QAX3OMAii5NxA== +"@babel/plugin-transform-runtime@^7.6.0": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.4.tgz#51fe458c1c1fa98a8b07934f4ed38b6cd62177a6" + integrity sha512-O8kSkS5fP74Ad/8pfsCMGa8sBRdLxYoSReaARRNSz3FbFQj3z/QUvoUmJ28gn9BO93YfnXc3j+Xyaqe8cKDNBQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== +"@babel/plugin-transform-shorthand-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" + integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" - integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== +"@babel/plugin-transform-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" + integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== +"@babel/plugin-transform-sticky-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" + integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== +"@babel/plugin-transform-template-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" + integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== +"@babel/plugin-transform-typeof-symbol@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" + integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -679,147 +620,114 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.2.0" -"@babel/plugin-transform-unicode-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698" - integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw== +"@babel/plugin-transform-unicode-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" + integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" -"@babel/polyfill@^7.0.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.6.0.tgz#6d89203f8b6cd323e8d946e47774ea35dc0619cc" - integrity sha512-q5BZJI0n/B10VaQQvln1IlDK3BTBJFbADx7tv+oXDPIDZuTo37H5Adb9jhlXm/fEN4Y7/64qD9mnrJJG7rmaTw== +"@babel/polyfill@^7.0.0", "@babel/polyfill@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.7.0.tgz#e1066e251e17606ec7908b05617f9b7f8180d8f3" + integrity sha512-/TS23MVvo34dFmf8mwCisCbWGrfhbiWZSwBo6HkADTBhUa2Q/jWltyY/tpofz/b6/RIhqaqQcquptCirqIhOaQ== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.2" -"@babel/preset-env@^7.0.0": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271" - integrity sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ== +"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.7.0": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.4.tgz#ccaf309ae8d1ee2409c85a4e2b5e280ceee830f8" + integrity sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-dynamic-import" "^7.5.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.6.2" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.5.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.3" - "@babel/plugin-transform-classes" "^7.5.5" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.6.0" - "@babel/plugin-transform-dotall-regex" "^7.6.2" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.6.0" - "@babel/plugin-transform-modules-systemjs" "^7.5.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.3" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.6.2" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.6.2" - "@babel/types" "^7.6.3" + "@babel/plugin-proposal-async-generator-functions" "^7.7.4" + "@babel/plugin-proposal-dynamic-import" "^7.7.4" + "@babel/plugin-proposal-json-strings" "^7.7.4" + "@babel/plugin-proposal-object-rest-spread" "^7.7.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + "@babel/plugin-syntax-top-level-await" "^7.7.4" + "@babel/plugin-transform-arrow-functions" "^7.7.4" + "@babel/plugin-transform-async-to-generator" "^7.7.4" + "@babel/plugin-transform-block-scoped-functions" "^7.7.4" + "@babel/plugin-transform-block-scoping" "^7.7.4" + "@babel/plugin-transform-classes" "^7.7.4" + "@babel/plugin-transform-computed-properties" "^7.7.4" + "@babel/plugin-transform-destructuring" "^7.7.4" + "@babel/plugin-transform-dotall-regex" "^7.7.4" + "@babel/plugin-transform-duplicate-keys" "^7.7.4" + "@babel/plugin-transform-exponentiation-operator" "^7.7.4" + "@babel/plugin-transform-for-of" "^7.7.4" + "@babel/plugin-transform-function-name" "^7.7.4" + "@babel/plugin-transform-literals" "^7.7.4" + "@babel/plugin-transform-member-expression-literals" "^7.7.4" + "@babel/plugin-transform-modules-amd" "^7.7.4" + "@babel/plugin-transform-modules-commonjs" "^7.7.4" + "@babel/plugin-transform-modules-systemjs" "^7.7.4" + "@babel/plugin-transform-modules-umd" "^7.7.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" + "@babel/plugin-transform-new-target" "^7.7.4" + "@babel/plugin-transform-object-super" "^7.7.4" + "@babel/plugin-transform-parameters" "^7.7.4" + "@babel/plugin-transform-property-literals" "^7.7.4" + "@babel/plugin-transform-regenerator" "^7.7.4" + "@babel/plugin-transform-reserved-words" "^7.7.4" + "@babel/plugin-transform-shorthand-properties" "^7.7.4" + "@babel/plugin-transform-spread" "^7.7.4" + "@babel/plugin-transform-sticky-regex" "^7.7.4" + "@babel/plugin-transform-template-literals" "^7.7.4" + "@babel/plugin-transform-typeof-symbol" "^7.7.4" + "@babel/plugin-transform-unicode-regex" "^7.7.4" + "@babel/types" "^7.7.4" browserslist "^4.6.0" core-js-compat "^3.1.1" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/runtime@^7.2.0": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" - integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== +"@babel/runtime@^7.7.0": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b" + integrity sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw== dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" - integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== +"@babel/template@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" + integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.0" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/template@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.0.tgz#4fadc1b8e734d97f56de39c77de76f2562e597d0" - integrity sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.2.4", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" - integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.2" - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - "@babel/parser" "^7.7.2" - "@babel/types" "^7.7.2" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" - integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.2.4", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" + integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.3" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.3" - "@babel/types" "^7.6.3" + "@babel/generator" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" - integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.1.6", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.2.tgz#550b82e5571dcd174af576e23f0adba7ffc683f7" - integrity sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA== +"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" + integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== dependencies: esutils "^2.0.2" lodash "^4.17.13" @@ -1202,7 +1110,7 @@ resolved "https://registry.yarnpkg.com/@types/ember__template/-/ember__template-3.0.0.tgz#d499ebf000faa371c1c98124633b9864be69b968" integrity sha512-aWNg/kL2QToE0fwI8MVgAr2upWyAUwqRv2sp3CpypsMTOC1lZizIehz8QI6w1m1+Eh1WYs/89gvuM3mTc4OyIw== -"@types/ember__test-helpers@^0.7.6": +"@types/ember__test-helpers@^0.7.9": version "0.7.9" resolved "https://registry.yarnpkg.com/@types/ember__test-helpers/-/ember__test-helpers-0.7.9.tgz#d35b8fce419acc1e279c331fdb28a2341ee2956c" integrity sha512-E94qkM9zS0qvJ0pXyN0moYEtrCfPAq8mhvuQNCPsXiZMUhFhNfpYTbldn7esBmgqhrA0CInCtNemmdvfkcL6zw== @@ -1251,12 +1159,12 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.2.tgz#75ba3beda30d690b89a5089ca1c6e8e386150b76" integrity sha512-dsfE4BHJkLQW+reOS6b17xhZ/6FB1rB8eRRvO08nn5o+voxf3i74tuyFWNH6djdfgX7Sm5s6LD8t6mJug4dpDw== -"@types/qunit@^2.5.3": +"@types/qunit@^2.9.0": version "2.9.0" resolved "https://registry.yarnpkg.com/@types/qunit/-/qunit-2.9.0.tgz#0b3fcbe2b92f067856adac82ba3afbc66d8835ac" integrity sha512-Hx34HZmTJKRay+x3sFdEK62I8Z8YSWYg+rAlNr4M+AbwvNUJYxTTmWEH4a8B9ZN+Fl61awFrw+oRicWLFVugvQ== -"@types/rsvp@*", "@types/rsvp@^4.0.2": +"@types/rsvp@*", "@types/rsvp@^4.0.3": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/rsvp/-/rsvp-4.0.3.tgz#4a1223158453257bce09d42b9eef7cfa6d257482" integrity sha512-OpRwxbgx16nL/0/7ol0WoLLyLaMXBvtPOHjqLljnzAB/E7Qk1wtjytxgBhOTBMZvuLXnJUqfnjb4W/QclNFvSA== @@ -1758,11 +1666,6 @@ ast-types@0.13.2: resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== -ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" - integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk= - astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -2812,7 +2715,7 @@ broccoli-config-replace@^1.1.2: debug "^2.2.0" fs-extra "^0.24.0" -broccoli-debug@^0.6.1, broccoli-debug@^0.6.4, broccoli-debug@^0.6.5: +broccoli-debug@^0.6.4, broccoli-debug@^0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/broccoli-debug/-/broccoli-debug-0.6.5.tgz#164a5cdafd8936e525e702bf8f91f39d758e2e78" integrity sha512-RIVjHvNar9EMCLDW/FggxFRXqpjhncM/3qq87bn/y+/zR9tqEkHvTqbyOc4QnB97NO2m6342w4wGkemkaeOuWg== @@ -3127,26 +3030,6 @@ broccoli-sri-hash@^2.1.0: sri-toolbox "^0.2.0" symlink-or-copy "^1.0.1" -broccoli-stew@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-1.6.0.tgz#01f6d92806ed6679ddbe48d405066a0e164dfbef" - integrity sha512-sUwCJNnYH4Na690By5xcEMAZqKgquUQnMAEuIiL3Z2k63mSw9Xg+7Ew4wCrFrMmXMcLpWjZDOm6Yqnq268N+ZQ== - dependencies: - broccoli-debug "^0.6.1" - broccoli-funnel "^2.0.0" - broccoli-merge-trees "^2.0.0" - broccoli-persistent-filter "^1.1.6" - broccoli-plugin "^1.3.0" - chalk "^2.4.1" - debug "^3.1.0" - ensure-posix-path "^1.0.1" - fs-extra "^5.0.0" - minimatch "^3.0.4" - resolve "^1.8.1" - rsvp "^4.8.3" - symlink-or-copy "^1.2.0" - walk-sync "^0.3.0" - broccoli-stew@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-3.0.0.tgz#fd1d19d162ad9490b42e5c563b78c26eb1e80b95" @@ -3517,7 +3400,7 @@ charm@^1.0.0: dependencies: inherits "^2.0.1" -chokidar@^2.0.2, chokidar@^2.0.3: +chokidar@^2.0.2: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -3879,14 +3762,7 @@ continuable-cache@^0.3.1: resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= -convert-source-map@^1.1.0, convert-source-map@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^1.7.0: +convert-source-map@^1.5.1, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -3998,15 +3874,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -4409,19 +4276,19 @@ ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6 ember-cli-version-checker "^2.1.2" semver "^5.5.0" -ember-cli-babel@^7.1.2, ember-cli-babel@^7.11.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0: - version "7.12.0" - resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.12.0.tgz#064997d199384be8c88d251f30ef67953d3bddc5" - integrity sha512-+EGQsbPvh19nNXHCm6rVBx2CdlxQlzxMyhey5hsGViDPriDI4PFYXYaFWdGizDrmZoDcG/Ywpeph3hl0NxGQTg== +ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.11.0, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0: + version "7.13.0" + resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.13.0.tgz#3f2c2ba7a44d7948ec927d41cf072673330f62cd" + integrity sha512-VjagtumwQP+3jsjLR64gpca5iq2o0PS1MT0PdC90COtAYqpOqNM9axYEYBamNLIuv+3vJpAoFKu8EMBC1ZlWGQ== dependencies: - "@babel/core" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.3.4" - "@babel/plugin-proposal-decorators" "^7.3.0" - "@babel/plugin-transform-modules-amd" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.2.0" - "@babel/polyfill" "^7.0.0" - "@babel/preset-env" "^7.0.0" - "@babel/runtime" "^7.2.0" + "@babel/core" "^7.7.0" + "@babel/plugin-proposal-class-properties" "^7.7.0" + "@babel/plugin-proposal-decorators" "^7.7.0" + "@babel/plugin-transform-modules-amd" "^7.5.0" + "@babel/plugin-transform-runtime" "^7.6.0" + "@babel/polyfill" "^7.7.0" + "@babel/preset-env" "^7.7.0" + "@babel/runtime" "^7.7.0" amd-name-resolver "^1.2.1" babel-plugin-debug-macros "^0.3.0" babel-plugin-ember-modules-api-polyfill "^2.12.0" @@ -4611,13 +4478,13 @@ ember-cli-test-loader@^2.2.0: dependencies: ember-cli-babel "^6.8.1" -ember-cli-typescript-blueprints@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ember-cli-typescript-blueprints/-/ember-cli-typescript-blueprints-1.2.0.tgz#cb69abe9841a3fd6c4c5b4aaa381b89cdb84a0ef" - integrity sha512-2kc0JSPE5joej9fWdO3RMDk/prrmLhWa5cb+sCBayI9L3BiHxsRcNIV544EUkdFssw8jhfyknAU2dnPoPnD59g== +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 "^6.6.0" + 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" @@ -4625,35 +4492,14 @@ ember-cli-typescript-blueprints@^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 "^2.1.2" - ember-router-generator "^1.2.3" + ember-cli-version-checker "^3.0.0" + ember-router-generator "^2.0.0" exists-sync "^0.1.0" - fs-extra "^7.0.0" + fs-extra "^8.0.0" inflection "^1.12.0" silent-error "^1.1.0" -ember-cli-typescript@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-1.5.0.tgz#076efe723c52ca2c8f0cdc9ee2ef640e941aa2c4" - integrity sha512-yE4Wa/JFOrEwkcPSAZ9bKMn/NieqIMz6rWMZJwAAiNTS7cT9U8ZcBvctuO0sGhfRR6A/0pdwiaqp9vqbOBaSFQ== - dependencies: - broccoli-funnel "^2.0.1" - broccoli-merge-trees "^2.0.0" - broccoli-plugin "^1.2.1" - broccoli-stew "^1.4.0" - chokidar "^2.0.3" - debug "^3.1.0" - ember-cli-typescript-blueprints "^1.0.0" - escape-string-regexp "^1.0.5" - execa "^0.9.0" - fs-extra "^5.0.0" - glob "^7.1.2" - resolve "^1.5.0" - rsvp "^4.8.1" - symlink-or-copy "^1.1.8" - walk-sync "^0.3.2" - -ember-cli-typescript@^2.0.2: +ember-cli-typescript@2.0.2, ember-cli-typescript@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-2.0.2.tgz#464984131fbdc05655eb61d1c3cdd911d3137f0d" integrity sha512-7I5azCTxOgRDN8aSSnJZIKSqr+MGnT+jLTUbBYqF8wu6ojs2DUnTePxUcQMcvNh3Q3B1ySv7Q/uZFSjdU9gSjA== @@ -4900,13 +4746,6 @@ ember-rfc176-data@^0.3.1, ember-rfc176-data@^0.3.12: resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.12.tgz#90d82878e69e2ac9a5438e8ce14d12c6031c5bd2" integrity sha512-g9HeZj/gU5bfIIrGXkP7MhS2b3Vu5DfNUrYr14hy99TgIvtZETO+96QF4WOEUXGjIJdfTRjerVnQlqngPQSv1g== -ember-router-generator@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-1.2.3.tgz#8ed2ca86ff323363120fc14278191e9e8f1315ee" - integrity sha1-jtLKhv8yM2MSD8FCeBkeno8TFe4= - dependencies: - recast "^0.11.3" - ember-router-generator@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-2.0.0.tgz#d04abfed4ba8b42d166477bbce47fccc672dbde0" @@ -5275,7 +5114,7 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -esprima@^3.1.3, esprima@~3.1.0: +esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= @@ -5352,19 +5191,6 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== -execa@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" - integrity sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA== - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -5512,7 +5338,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.4, fast-levenshtein@~2.0.6: +fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -5805,7 +5631,7 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.0.1, fs-extra@^8.1.0: +fs-extra@^8.0.0, fs-extra@^8.0.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -6091,19 +5917,7 @@ glob@^5.0.10: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.4, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" - integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.5: +glob@^7.0.4, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.5: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -6196,12 +6010,7 @@ got@^8.0.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6: - version "4.2.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== - -graceful-fs@^4.1.15, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -6221,18 +6030,7 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.0.11, handlebars@^4.0.4: - version "4.4.5" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.5.tgz#1b1f94f9bfe7379adda86a8b73fb570265a0dddd" - integrity sha512-0Ce31oWVB7YidkaTq33ZxEbN+UDxMMgThvCe8ptgQViymL5DPis9uLdTA13MiRPhgvqyxIegugrP97iK3JeBHg== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -handlebars@^4.3.1: +handlebars@^4.0.11, handlebars@^4.0.4, handlebars@^4.3.1: version "4.5.2" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.2.tgz#5a4eb92ab5962ca3415ac188c86dc7f784f76a0f" integrity sha512-29Zxv/cynYB7mkT1rVWQnV7mGX6v7H/miQ6dbEpYTKq5eJBN7PsRB+ViYJlcT6JINTSu4dVB9kOqEun78h6Exg== @@ -7657,14 +7455,6 @@ lru-cache@2: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -8636,7 +8426,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -8648,18 +8438,6 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - ora@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" @@ -9004,7 +8782,7 @@ printf@^0.5.1: resolved "https://registry.yarnpkg.com/printf/-/printf-0.5.2.tgz#8546e01a1f647b1dff510ae92bdc92beb8c9b2f9" integrity sha512-Hn0UuWqTRd94HiCJoiCNGZTnSyXJdIF3t4/4I293hezIzyH4pQ3ai4TlH/SmRCiMvR5aNMxSYWshjQWWW6J8MQ== -private@^0.1.6, private@^0.1.8, private@~0.1.5: +private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -9082,11 +8860,6 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - psl@^1.1.24, psl@^1.1.28: version "1.4.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" @@ -9385,16 +9158,6 @@ realize-package-specifier@~3.0.1: dezalgo "^1.0.1" npm-package-arg "^4.1.1" -recast@^0.11.3: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" - integrity sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM= - dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" - recast@^0.18.1: version "0.18.5" resolved "https://registry.yarnpkg.com/recast/-/recast-0.18.5.tgz#9d5adbc07983a3c8145f3034812374a493e0fe4d" @@ -9774,7 +9537,7 @@ rsvp@^3.0.14, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0 resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== -rsvp@^4.6.1, rsvp@^4.7.0, rsvp@^4.8.1, rsvp@^4.8.2, rsvp@^4.8.3, rsvp@^4.8.4, rsvp@^4.8.5: +rsvp@^4.6.1, rsvp@^4.7.0, rsvp@^4.8.1, rsvp@^4.8.2, rsvp@^4.8.4, rsvp@^4.8.5: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== @@ -10201,7 +9964,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.6, source-map@^0.5.7, source-map@~0.5.0: +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= @@ -10900,10 +10663,10 @@ typescript-memoize@^1.0.0-alpha.3: dependencies: core-js "2.4.1" -typescript@^3.6.4: - version "3.6.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.4.tgz#b18752bb3792bc1a0281335f7f6ebf1bbfc5b91d" - integrity sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg== +typescript@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" + integrity sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" @@ -11356,11 +11119,6 @@ wordwrap@~0.0.2: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -11476,11 +11234,6 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" From e137dda1181a0dd03f30a303ef5eed10e0c50770 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 08:06:27 -0700 Subject: [PATCH 46/75] add babel to deps --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8fb3b723..3b4622e3 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "bugs": "https://github.com/poteto/ember-changeset/issues", "homepage": "https://github.com/poteto/ember-changeset", "dependencies": { + "ember-cli-babel": "^7.13.0", "ember-cli-typescript": "2.0.2", "ember-deep-set": "^0.2.0" }, @@ -45,7 +46,6 @@ "broccoli-asset-rev": "^3.0.0", "ember-auto-import": "^1.5.2", "ember-cli": "~3.14.0", - "ember-cli-babel": "^7.13.0", "ember-cli-dependency-checker": "^2.0.0", "ember-cli-eslint": "^5.1.0", "ember-cli-htmlbars": "^4.0.5", From 6dffd769831fdd5cea4f3b573a45e28423549158 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 08:16:24 -0700 Subject: [PATCH 47/75] add back experimentalDecorators --- tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.json b/tsconfig.json index 3bfe8c8e..8a6d944e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,7 @@ "allowJs": true, "moduleResolution": "node", "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, "noImplicitAny": true, "noImplicitThis": true, "alwaysStrict": true, From 94f8c75e40837a5de08631102582e04d6caf10c6 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 08:17:40 -0700 Subject: [PATCH 48/75] type check spread --- addon/utils/set-deep.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/utils/set-deep.ts b/addon/utils/set-deep.ts index 40b320a7..a2840b1d 100644 --- a/addon/utils/set-deep.ts +++ b/addon/utils/set-deep.ts @@ -63,6 +63,6 @@ function isObject(val: unknown) { return val !== null && (typeof val === 'object' || typeof val === 'function'); } -function isPlainObject(o: unknown) { +function isPlainObject(o: unknown): o is object { return Object.prototype.toString.call(o) === '[object Object]'; } From c5bf3cdc4f7688992816e8e7081ff99aae5155c0 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 13:38:53 -0700 Subject: [PATCH 49/75] bump dep --- package.json | 2 +- yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 3b4622e3..6715d168 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "broccoli-asset-rev": "^3.0.0", "ember-auto-import": "^1.5.2", "ember-cli": "~3.14.0", - "ember-cli-dependency-checker": "^2.0.0", + "ember-cli-dependency-checker": "^3.1.0", "ember-cli-eslint": "^5.1.0", "ember-cli-htmlbars": "^4.0.5", "ember-cli-htmlbars-inline-precompile": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index b6d8d91e..65a5c09b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4314,10 +4314,10 @@ ember-cli-broccoli-sane-watcher@^3.0.0: rsvp "^3.0.18" sane "^4.0.0" -ember-cli-dependency-checker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ember-cli-dependency-checker/-/ember-cli-dependency-checker-2.2.1.tgz#1eb728258dc7d528951c391d39b365e1beedecca" - integrity sha512-DmxayycdIPx6wZLpfwXq+MOtKtxhFbCw05kdGaQEyKKNSMeSdywsUjZyxneEpGb8Ztrm+kBwFW3eseydnYLWyw== +ember-cli-dependency-checker@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ember-cli-dependency-checker/-/ember-cli-dependency-checker-3.2.0.tgz#9202ad9e14d6fda33cffc22a11c343c2a8885330" + integrity sha512-dkSmcJ/jY/2ms/S6ph2jXSfOW5VfOpLfg5DFEbra0SaMNgYkNDFF1o0U4OdTsG37L5h/AXWNuVtnOa4TMabz9Q== dependencies: chalk "^2.3.0" find-yarn-workspace-root "^1.1.0" @@ -4770,9 +4770,9 @@ ember-source-channel-url@^2.0.1: got "^8.0.1" ember-source@~3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.14.1.tgz#f11f98dffa7b169a045590203fa15c3ad2098c34" - integrity sha512-UvgjF/I7jANBEjQWdxtL/luXn97ZtIL3QCsJnR7HIcwRg7JuIyz/kaT9gLOGMxWEnwu610gJ+Ic0h0dkgQqg2w== + version "3.14.2" + resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.14.2.tgz#5cb5c84004192e2288300deb644b412fb389fc81" + integrity sha512-Yi99+K0C95gJR9kqGGyak2dZX2moBn4e+UmA5G3ZiJxDbWdvVGkef4u+8P261VRLvP9xsQiIruhkPqjHcs46XA== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/plugin-transform-block-scoping" "^7.6.0" From b4f58a8100ec2dccac71b1ab243b3e6608edce1a Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 14:53:26 -0700 Subject: [PATCH 50/75] Update more deps --- addon/index.ts | 6 +++--- .../{changeset-set.ts => changeset-set.js} | 0 app/helpers/{changeset.ts => changeset.js} | 0 package.json | 2 -- .../integration/components/changeset-test.js | 5 ++--- tests/unit/changeset-test.js | 17 ++++++++--------- tests/unit/utils/is-promise-test.js | 3 +-- yarn.lock | 19 +------------------ 8 files changed, 15 insertions(+), 37 deletions(-) rename app/helpers/{changeset-set.ts => changeset-set.js} (100%) rename app/helpers/{changeset.ts => changeset.js} (100%) diff --git a/addon/index.ts b/addon/index.ts index 4ea2342c..0aa2a0d4 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -25,9 +25,9 @@ const CONTENT = '_content'; const defaultValidatorFn = () => true; class EmberChangeset extends BufferedChangeset { - @tracked [CHANGES]: Changes; - @tracked [ERRORS]: Errors; - @tracked [CONTENT]: object; + @tracked '_changes': Changes; + @tracked '_errors': Errors; + @tracked '_content': object; getDeep = safeGet as any; diff --git a/app/helpers/changeset-set.ts b/app/helpers/changeset-set.js similarity index 100% rename from app/helpers/changeset-set.ts rename to app/helpers/changeset-set.js diff --git a/app/helpers/changeset.ts b/app/helpers/changeset.js similarity index 100% rename from app/helpers/changeset.ts rename to app/helpers/changeset.js diff --git a/package.json b/package.json index 6715d168..e9746029 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,6 @@ "@types/ember__polyfills": "^3.0.3", "@types/ember__test-helpers": "^0.7.9", "@types/qunit": "^2.9.0", - "@types/rsvp": "^4.0.3", "babel-eslint": "^10.0.3", "broccoli-asset-rev": "^3.0.0", "ember-auto-import": "^1.5.2", @@ -49,7 +48,6 @@ "ember-cli-dependency-checker": "^3.1.0", "ember-cli-eslint": "^5.1.0", "ember-cli-htmlbars": "^4.0.5", - "ember-cli-htmlbars-inline-precompile": "^3.0.0", "ember-cli-inject-live-reload": "^2.0.1", "ember-cli-release": "^1.0.0-beta.2", "ember-cli-shims": "^1.2.0", diff --git a/tests/integration/components/changeset-test.js b/tests/integration/components/changeset-test.js index 6304719b..ad0b3d94 100644 --- a/tests/integration/components/changeset-test.js +++ b/tests/integration/components/changeset-test.js @@ -1,6 +1,5 @@ import { module, test, skip } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; -import { resolve } from 'rsvp'; import { typeOf, isPresent } from '@ember/utils'; import Changeset from 'ember-changeset'; import hbs from 'htmlbars-inline-precompile'; @@ -329,7 +328,7 @@ module('Integration | Helper | changeset', function(hooks) { skip('nested object updates when set with async validator', async function(assert) { let data = { person: { firstName: 'Jim' } }; - let validator = () => resolve(true); + let validator = () => Promise.resolve(true); let c = new Changeset(data, validator); this.set('c', c); await render(hbs` @@ -494,7 +493,7 @@ module('Integration | Helper | changeset', function(hooks) { }); test('it handles models that are promises', async function(assert) { - this.set('dummyModel', resolve({ firstName: 'Jim', lastName: 'Bob' })); + this.set('dummyModel', Promise.resolve({ firstName: 'Jim', lastName: 'Bob' })); await render(hbs` {{#with (changeset dummyModel) as |changesetObj|}}

{{changesetObj.firstName}} {{changesetObj.lastName}}

diff --git a/tests/unit/changeset-test.js b/tests/unit/changeset-test.js index e37e1aed..7811963e 100644 --- a/tests/unit/changeset-test.js +++ b/tests/unit/changeset-test.js @@ -10,7 +10,6 @@ import EmberObject, { import { reads } from '@ember/object/computed'; import ObjectProxy from '@ember/object/proxy'; -import { Promise, resolve } from 'rsvp'; import { dasherize } from '@ember/string'; import { isPresent, typeOf } from '@ember/utils'; import { next } from '@ember/runloop'; @@ -28,7 +27,7 @@ let dummyValidations = { return isPresent(newValue) && (changedPassword === newValue || password === newValue) || "password doesn't match"; }, async(value) { - return resolve(value); + return Promise.resolve(value); }, options(value) { return isPresent(value); @@ -54,7 +53,7 @@ module('Unit | Utility | changeset', function(hooks) { hooks.beforeEach(function() { let Dummy = EmberObject.extend({ save() { - return resolve(this); + return Promise.resolve(this); } }); dummyModel = Dummy.create({ exampleArray }); @@ -755,7 +754,7 @@ module('Unit | Utility | changeset', function(hooks) { set(dummyModel, 'save', (dummyOptions) => { result = 'ok'; options = dummyOptions; - return resolve('saveResult'); + return Promise.resolve('saveResult'); }); let dummyChangeset = new Changeset(dummyModel); dummyChangeset.set('name', 'foo'); @@ -802,7 +801,7 @@ module('Unit | Utility | changeset', function(hooks) { assert.expect(1); set(dummyModel, 'save', () => { - return new Promise((resolve, reject) => { + return new Promise((_, reject) => { next(null, reject, new Error('some ember data error')); }); }); @@ -1497,7 +1496,7 @@ module('Unit | Utility | changeset', function(hooks) { test('isValidating returns false when validations have resolved', async function(assert) { let dummyChangeset; - let _validator = () => resolve(true); + let _validator = () => Promise.resolve(true); let _validations = { reservations() { return _validator(); @@ -1564,7 +1563,7 @@ module('Unit | Utility | changeset', function(hooks) { test('afterValidation event is fired after validation', async function(assert) { let dummyChangeset; - let _validator = () => resolve(true); + let _validator = () => Promise.resolve(true); let _validations = { reservations() { return _validator(); @@ -1582,7 +1581,7 @@ module('Unit | Utility | changeset', function(hooks) { test('afterValidation event is triggered with the key', async function(assert) { let dummyChangeset; - let _validator = () => resolve(true); + let _validator = () => Promise.resolve(true); let _validations = { reservations() { return _validator(); @@ -1608,7 +1607,7 @@ module('Unit | Utility | changeset', function(hooks) { test('afterRollback event is fired after rollback', async function(assert) { let dummyChangeset; - let _validator = () => resolve(true); + let _validator = () => Promise.resolve(true); let _validations = { reservations() { return _validator(); diff --git a/tests/unit/utils/is-promise-test.js b/tests/unit/utils/is-promise-test.js index 023b92f3..a14beb98 100644 --- a/tests/unit/utils/is-promise-test.js +++ b/tests/unit/utils/is-promise-test.js @@ -1,12 +1,11 @@ import isPromise from 'ember-changeset/utils/is-promise'; -import { Promise, resolve } from 'rsvp'; import { module, test } from 'qunit'; module('Unit | Utility | is promise'); let testData = [ { - value: resolve('foo'), + value: Promise.resolve('foo'), expected: true }, { diff --git a/yarn.lock b/yarn.lock index 65a5c09b..ffcc8d24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1164,7 +1164,7 @@ resolved "https://registry.yarnpkg.com/@types/qunit/-/qunit-2.9.0.tgz#0b3fcbe2b92f067856adac82ba3afbc66d8835ac" integrity sha512-Hx34HZmTJKRay+x3sFdEK62I8Z8YSWYg+rAlNr4M+AbwvNUJYxTTmWEH4a8B9ZN+Fl61awFrw+oRicWLFVugvQ== -"@types/rsvp@*", "@types/rsvp@^4.0.3": +"@types/rsvp@*": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/rsvp/-/rsvp-4.0.3.tgz#4a1223158453257bce09d42b9eef7cfa6d257482" integrity sha512-OpRwxbgx16nL/0/7ol0WoLLyLaMXBvtPOHjqLljnzAB/E7Qk1wtjytxgBhOTBMZvuLXnJUqfnjb4W/QclNFvSA== @@ -1996,11 +1996,6 @@ babel-plugin-htmlbars-inline-precompile@^1.0.0: resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-1.0.0.tgz#a9d2f6eaad8a3f3d361602de593a8cbef8179c22" integrity sha512-4jvKEHR1bAX03hBDZ94IXsYCj3bwk9vYsn6ux6JZNL2U5pvzCWjqyrGahfsGNrhERyxw8IqcirOi9Q6WCo3dkQ== -babel-plugin-htmlbars-inline-precompile@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-2.1.1.tgz#59edd4eab28d27fbafa26d51bc19795278d103a9" - integrity sha512-obo5//IFrEZNAQovcXxOXLn5nwkQ0Y+xhR7AMg1sYR6W7KxQLZI9/XzbIytVhjwwY+Bd2e0+qyHEplJbHyZ1Og== - babel-plugin-htmlbars-inline-precompile@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-3.0.0.tgz#95aa0d2379347cda9a7127c028fe35cb39179fa2" @@ -4351,18 +4346,6 @@ ember-cli-htmlbars-inline-precompile@^2.1.0: heimdalljs-logger "^0.1.9" silent-error "^1.1.0" -ember-cli-htmlbars-inline-precompile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-3.0.1.tgz#dc1f6fbc3bb5e51d01ca334e692c7f0b5e298d57" - integrity sha512-mLGJjxEPiOFty9HVM7LHg+5cfM1M9lwbEBmlanZMM333cnwvgZulKjTYU0/e0tpWDvNvPdX8rM+/Leh0TIrqqA== - dependencies: - babel-plugin-htmlbars-inline-precompile "^2.1.0" - ember-cli-version-checker "^3.1.3" - hash-for-dep "^1.5.1" - heimdalljs-logger "^0.1.9" - semver "^6.3.0" - silent-error "^1.1.0" - ember-cli-htmlbars@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-4.0.8.tgz#e87b62e7040bd478a2d007053bdb1644dd1685b0" From afee3ff9747e906f602a4e7bac1c35cd25557242 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 15:19:31 -0700 Subject: [PATCH 51/75] add glimmer component --- addon/index.ts | 10 ++-- package.json | 1 + yarn.lock | 155 ++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 159 insertions(+), 7 deletions(-) diff --git a/addon/index.ts b/addon/index.ts index 0aa2a0d4..0142a38e 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -1,7 +1,6 @@ import { assert } from '@ember/debug'; import { BufferedChangeset } from './-private/validated-changeset'; import { notifyPropertyChange } from '@ember/object'; -// @ts-ignore import { tracked } from '@glimmer/tracking'; import { get as safeGet, set as safeSet } from '@ember/object'; import mergeDeep from 'ember-changeset/utils/merge-deep'; @@ -25,9 +24,12 @@ const CONTENT = '_content'; const defaultValidatorFn = () => true; class EmberChangeset extends BufferedChangeset { - @tracked '_changes': Changes; - @tracked '_errors': Errors; - @tracked '_content': object; + @tracked + '_changes': Changes; + @tracked + '_errors': Errors; + @tracked + '_content': object; getDeep = safeGet as any; diff --git a/package.json b/package.json index e9746029..8d9f6a28 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "bugs": "https://github.com/poteto/ember-changeset/issues", "homepage": "https://github.com/poteto/ember-changeset", "dependencies": { + "@glimmer/component": "^1.0.0-beta.3", "ember-cli-babel": "^7.13.0", "ember-cli-typescript": "2.0.2", "ember-deep-set": "^0.2.0" diff --git a/yarn.lock b/yarn.lock index ffcc8d24..1b401f57 100644 --- a/yarn.lock +++ b/yarn.lock @@ -63,7 +63,7 @@ "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" -"@babel/helper-create-class-features-plugin@^7.7.4": +"@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== @@ -620,6 +620,15 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.2.0" +"@babel/plugin-transform-typescript@~7.5.0": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz#6d862766f09b2da1cb1f7d505fe2aedab6b7d4b8" + integrity sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.5.5" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-typescript" "^7.2.0" + "@babel/plugin-transform-unicode-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" @@ -917,6 +926,30 @@ resolve "^1.8.1" semver "^5.6.0" +"@glimmer/component@^1.0.0-beta.3": + version "1.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@glimmer/component/-/component-1.0.0-beta.3.tgz#bc466f4da776cb74bc8c6c836d6aa658f2161bee" + integrity sha512-I/NTVE8Nz0gjvAlO9mAdP0+XumRj65zqh0+J2jBDxAQHJTw9R55MTx4nvkbQteh6+sWPixFzgtt/oLzy8L9sxQ== + dependencies: + "@glimmer/di" "^0.1.9" + "@glimmer/env" "^0.1.7" + "@glimmer/util" "^0.44.0" + broccoli-file-creator "^2.1.1" + broccoli-merge-trees "^3.0.2" + ember-cli-babel "^7.7.3" + 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-typescript "3.0.0" + ember-compatibility-helpers "^1.1.2" + +"@glimmer/di@^0.1.9": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.1.11.tgz#a6878c07a13a2c2c76fcde598a5c97637bfc4280" + integrity sha1-poeMB6E6LCx2/N5ZilyXY3v8QoA= + "@glimmer/di@^0.2.0": version "0.2.1" resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.2.1.tgz#5286b6b32040232b751138f6d006130c728d4b3d" @@ -934,6 +967,11 @@ dependencies: "@glimmer/di" "^0.2.0" +"@glimmer/util@^0.44.0": + version "0.44.0" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.44.0.tgz#45df98d73812440206ae7bda87cfe04aaae21ed9" + integrity sha512-duAsm30uVK9jSysElCbLyU6QQYO2X9iLDLBIBUcCqck9qN1o3tK2qWiHbGK5d6g8E2AJ4H88UrfElkyaJlGrwg== + "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" @@ -3880,6 +3918,15 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -4500,6 +4547,23 @@ ember-cli-typescript@2.0.2, ember-cli-typescript@^2.0.2: stagehand "^1.0.0" walk-sync "^1.0.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" + integrity sha512-lo5YArbJzJi5ssvaGqTt6+FnhTALnSvYVuxM7lfyL1UCMudyNJ94ovH5C7n5il7ATd6WsNiAPRUO/v+s5Jq/aA== + dependencies: + "@babel/plugin-transform-typescript" "~7.5.0" + ansi-to-html "^0.6.6" + debug "^4.0.0" + ember-cli-babel-plugin-helpers "^1.0.0" + execa "^2.0.0" + fs-extra "^8.0.0" + resolve "^1.5.0" + rsvp "^4.8.1" + semver "^6.0.0" + stagehand "^1.0.0" + walk-sync "^2.0.0" + ember-cli-uglify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ember-cli-uglify/-/ember-cli-uglify-3.0.0.tgz#8819665b2cc5fe70e3ba9fe7a94645209bc42fd6" @@ -4629,7 +4693,7 @@ ember-cli@~3.14.0: watch-detector "^1.0.0" yam "^1.0.0" -ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.2.0: +ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.0.tgz#feee16c5e9ef1b1f1e53903b241740ad4b01097e" integrity sha512-pUW4MzJdcaQtwGsErYmitFRs0rlCYBAnunVzlFFUBr4xhjlCjgHJo0b53gFnhTgenNM3d3/NqLarzRhDTjXRTg== @@ -5187,6 +5251,21 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" + integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^3.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + exists-sync@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.0.4.tgz#9744c2c428cc03b01060db454d4b12f0ef3c8879" @@ -5802,6 +5881,13 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -6697,6 +6783,11 @@ is-stream@^1.0.0, is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -7591,6 +7682,11 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merge-trees@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-trees/-/merge-trees-1.0.1.tgz#ccbe674569787f9def17fd46e6525f5700bbd23e" @@ -7675,6 +7771,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -8169,6 +8270,13 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-run-path@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" + integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg== + dependencies: + path-key "^3.0.0" + npm-user-validate@~0.1.2: version "0.1.5" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-0.1.5.tgz#52465d50c2d20294a57125b996baedbf56c5004b" @@ -8396,6 +8504,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + opener@~1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" @@ -8471,6 +8586,11 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + p-is-promise@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" @@ -8647,6 +8767,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -9729,11 +9854,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -10223,6 +10360,11 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -10940,7 +11082,7 @@ walk-sync@^1.0.0, walk-sync@^1.1.3: ensure-posix-path "^1.1.0" matcher-collection "^1.1.1" -walk-sync@^2.0.2: +walk-sync@^2.0.0, walk-sync@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-2.0.2.tgz#5ea8a28377c8be68c92d50f4007ea381725da14b" integrity sha512-dCZkrxfHjPn7tIvdYrX3uMD/R0beVrHpA8lROQ5wWrl8psJgR6xwCkwqTFes0dNujbS2o/ITpvSYgIFsLsf13A== @@ -11078,6 +11220,13 @@ which@1, which@^1.2.14, which@^1.2.9, which@^1.3.0: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + which@~1.2.1: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" From b91aaffbd943f8536b4b989417b329473898f2a1 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 15:29:10 -0700 Subject: [PATCH 52/75] strict property initialization --- addon/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addon/index.ts b/addon/index.ts index 0142a38e..327d1d97 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -25,11 +25,11 @@ const defaultValidatorFn = () => true; class EmberChangeset extends BufferedChangeset { @tracked - '_changes': Changes; + CHANGES: Changes = {}; @tracked - '_errors': Errors; + ERRORS: Errors = {}; @tracked - '_content': object; + CONTENT: object | undefined; getDeep = safeGet as any; From d0f2bdef5472c9b65f283db4166458189643bddd Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 15:40:33 -0700 Subject: [PATCH 53/75] update yarn file --- yarn.lock | 650 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 358 insertions(+), 292 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1b401f57..490f79e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -353,9 +353,9 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript@^7.2.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" - integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b" + integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -521,9 +521,9 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-object-assign@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz#6fdeea42be17040f119e38e23ea0f49f31968bde" - integrity sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.7.4.tgz#a31b70c434a00a078b2d4d10dbd59992fa70afca" + integrity sha512-0TpeUlnhQDwKxPLTIckdaWt46L2s61c/5w5snw1OUod5ehOJywZD98Ha3dFHVjeqkfOFtOTH7cqxddjxUuvcmg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -733,7 +733,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.7.4": +"@babel/types@^7.0.0", "@babel/types@^7.1.5", "@babel/types@^7.1.6", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== @@ -750,97 +750,11 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@ember-data/-build-infra@3.13.1": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@ember-data/-build-infra/-/-build-infra-3.13.1.tgz#e31247b72a4c61b837286d0ef0829f4128466601" - integrity sha512-bDvnQVPAaQf2UuRsU/6ha444hwdUsUeV5vNsc7U2i6ffzSYiF9y8yQhOoW0JgTUwz0mnASRscOO6QKEUJOTkKA== - dependencies: - "@babel/plugin-transform-block-scoping" "^7.5.5" - "@ember/edition-utils" "^1.1.1" - babel-plugin-debug-macros "^0.3.2" - babel-plugin-feature-flags "^0.3.1" - babel-plugin-filter-imports "^3.0.0" - babel6-plugin-strip-class-callcheck "^6.0.0" - broccoli-debug "^0.6.5" - broccoli-file-creator "^2.1.1" - broccoli-funnel "^2.0.2" - broccoli-merge-trees "^3.0.2" - broccoli-rollup "^4.1.1" - calculate-cache-key-for-tree "^2.0.0" - chalk "^2.4.1" - ember-cli-path-utils "^1.0.0" - ember-cli-string-utils "^1.1.0" - ember-cli-version-checker "^3.1.2" - esm "^3.2.25" - git-repo-info "^2.0.0" - glob "^7.1.4" - npm-git-info "^1.0.3" - rimraf "^2.6.2" - rsvp "^4.8.5" - silent-error "^1.1.1" - -"@ember-data/adapter@3.13.1": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@ember-data/adapter/-/adapter-3.13.1.tgz#2cb9becd3b8ac844e1ae97b408d2c3118a695f5c" - integrity sha512-IpdebSh8B4HlLwkpmpOJUE63U0Q0itI3StsGzZ5i/DIKD6WsMFdux7v8fxRqkW4ZwQDjQdEAtNUUWRILQcWDFw== - dependencies: - "@ember-data/-build-infra" "3.13.1" - "@ember/edition-utils" "^1.1.1" - ember-cli-babel "^7.8.0" - ember-cli-test-info "^1.0.0" - ember-cli-typescript "^2.0.2" - -"@ember-data/canary-features@3.13.1": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@ember-data/canary-features/-/canary-features-3.13.1.tgz#c60302d498153fbefe9f1a6d30b9a23d997cbc49" - integrity sha512-zfLpzcTxux5UPA/E0snGJqbM3yPtcQgWcen45Rcj9AcQNsnYiw/r9HV0uTHzRzeyH7lDMplyvLdQedvyk8K88w== - dependencies: - ember-cli-babel "^7.8.0" - -"@ember-data/model@3.13.1": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@ember-data/model/-/model-3.13.1.tgz#6364d5ed3f8997a35d39b5b97a3519b2df63870b" - integrity sha512-lm6AWuBSNp6zMPIjJGN6Dh7u4DJDd8ejOPaS3Cv7r7pgR1ROxRmrjMcgxFdqMY51a/MREj0BfTMWSHKsftcCYA== - dependencies: - "@ember-data/-build-infra" "3.13.1" - "@ember-data/store" "3.13.1" - "@ember/edition-utils" "^1.1.1" - ember-cli-babel "^7.8.0" - ember-cli-string-utils "^1.1.0" - ember-cli-test-info "^1.0.0" - ember-cli-typescript "^2.0.2" - ember-compatibility-helpers "^1.2.0" - inflection "1.12.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.13.1": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@ember-data/serializer/-/serializer-3.13.1.tgz#0d1f844caa4e98f6f6c7f28341fa6660b7e568c3" - integrity sha512-DhTtsvED0KSLy21zBw5NVnSnaJgLEv5vvLUPN1JQyY47Q+auQXi2JXzgTV8mYdTl4Xbe6GYygC0jyPUA4rM8IA== - dependencies: - "@ember-data/-build-infra" "3.13.1" - "@ember-data/store" "3.13.1" - ember-cli-babel "^7.8.0" - ember-cli-test-info "^1.0.0" - ember-cli-typescript "^2.0.2" - -"@ember-data/store@3.13.1": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@ember-data/store/-/store-3.13.1.tgz#e74cad3f5650451f90740b3b3e5f4ed0f6213127" - integrity sha512-7Inhnl3J6yFYE6autfOUPyrNJ63S28OXUM3k4O0pOlvWQbsEPNoELMNPUvjatxRB608qg5Yloh/kVxbdZsM/4w== - dependencies: - "@ember-data/-build-infra" "3.13.1" - "@ember-data/adapter" "3.13.1" - "@ember-data/canary-features" "3.13.1" - ember-cli-babel "^7.8.0" - ember-cli-path-utils "^1.0.0" - ember-cli-typescript "^2.0.2" - heimdalljs "^0.3.0" - "@ember/edition-utils@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.1.1.tgz#d5732c3da593f202e6e1ac6dbee56a758242403f" @@ -868,6 +782,13 @@ ember-cli-babel "^6.16.0" ember-compatibility-helpers "^1.1.1" +"@ember/string@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@ember/string/-/string-1.0.0.tgz#3a2254caedacb95e09071204d36cad49e0f8b855" + integrity sha512-KZ+CcIXFdyIBMztxDMgza4SdLJgIeUgTjDAoHk6M50C2u1X/BK7KWUIN7MIK2LNTOMvbib9lWwEzKboxdI4lBw== + dependencies: + ember-cli-babel "^7.4.0" + "@ember/test-helpers@^1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-1.7.1.tgz#cc22a954b3b46856518f034bd492a74e0482389f" @@ -977,10 +898,12 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== -"@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/acorn@^4.0.3": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.5.tgz#e29fdf884695e77be4e99e67d748f5147255752d" + integrity sha512-603sPiZ4GVRHPvn6vNgEAvJewKsy+zwRWYS2MeIMemgoAtcjlw2G3lALxrb9OPA17J28bkB71R33yXlQbUatCA== + dependencies: + "@types/estree" "*" "@types/ember-data@^3.1.9": version "3.1.9" @@ -1077,9 +1000,9 @@ "@types/ember__object" "*" "@types/ember__debug@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/ember__debug/-/ember__debug-3.0.5.tgz#ed7636dec3380a363c02f074d8e0a50cd6d563ab" - integrity sha512-1zXDboNm06c0S12bg7G75eFF21aW1C8QFKZGuQTQ66Xur5nwYHii6R2+t0lylgZTxqeRwjmeEZdROpYUNWexJQ== + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/ember__debug/-/ember__debug-3.0.6.tgz#fa8bbc58249d8bdeea9be5b4ab8e974b33c39b07" + integrity sha512-he07ArVIGzXw79NDEePawpkQSmiDc9C6Z/K6MkD2sUJdVSFaggGXBKvGh/QdenaP8hdYz36/umXGabq/Z862SA== dependencies: "@types/ember__debug" "*" "@types/ember__engine" "*" @@ -1170,7 +1093,7 @@ resolved "https://registry.yarnpkg.com/@types/ember__utils/-/ember__utils-3.0.3.tgz#c7bfe0ea89411f3376965a1214028561fdcd24eb" integrity sha512-GhXlUsGln/7PzLMqmtplqLSG8IWu2F9AjEKlqds/BrZlQtbMVS3MCvIkH1R8xlatYml02PqIdd9rZLi7r6QS6Q== -"@types/estree@*": +"@types/estree@*", "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== @@ -1192,10 +1115,10 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*": - version "12.11.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.2.tgz#75ba3beda30d690b89a5089ca1c6e8e386150b76" - integrity sha512-dsfE4BHJkLQW+reOS6b17xhZ/6FB1rB8eRRvO08nn5o+voxf3i74tuyFWNH6djdfgX7Sm5s6LD8t6mJug4dpDw== +"@types/node@^9.6.0": + version "9.6.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.55.tgz#7cc1358c9c18e71f6c020e410962971863232cf5" + integrity sha512-e/5tg8Ok0gSrN6pvHphnwTK0/CD9VPZrtZqpvvpEFAtfs+ZntusgGaWkf2lSEq1OFe2EDPeUMiMVpy4nZpJ4AQ== "@types/qunit@^2.9.0": version "2.9.0" @@ -1418,7 +1341,7 @@ acorn-walk@^6.0.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn@^5.0.0, acorn@^5.6.2: +acorn@^5.0.0, acorn@^5.5.3, acorn@^5.6.2: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== @@ -1428,11 +1351,6 @@ acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== -acorn@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" - integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== - after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" @@ -1465,7 +1383,7 @@ amd-name-resolver@1.2.0: dependencies: ensure-posix-path "^1.0.1" -amd-name-resolver@^1.2.1, amd-name-resolver@^1.3.1: +amd-name-resolver@^1.2.0, amd-name-resolver@^1.2.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== @@ -1488,6 +1406,11 @@ ansi-html@^0.0.7: resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= +ansi-regex@*, ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1516,9 +1439,9 @@ ansi-styles@^3.0.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: color-convert "^1.9.0" ansi-to-html@^0.6.6: - version "0.6.12" - resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.12.tgz#9dcd1646f17770d02ec065615e97f979f4e313cb" - integrity sha512-qBkIqLW979675mP76yB7yVkzeAWtATegdnDQ0RA3CZzknx0yUlNxMSML4xFdBfTs2GWYFQ1FELfbGbVSPzJ+LA== + version "0.6.13" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.13.tgz#c72eae8b63e5ca0643aab11bfc6e6f2217425833" + integrity sha512-Ys2/umuaTlQvP9DLkaa7UzRKF2FLrfod/hNHXS9QhXCrw7seObG6ksOGmNz3UoK+adwM8L9vQfG7mvaxfJ3Jvw== dependencies: entities "^1.1.2" @@ -1710,9 +1633,9 @@ astral-regex@^1.0.0: integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== async-disk-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-1.3.4.tgz#a5c9f72f199a9933583659f57a0e11377884f816" - integrity sha512-qsIvGJ/XYZ5bSGf5vHt2aEQHZnyuehmk/+51rCJhpkZl4LtvOZ+STbhLbdFAJGYO+dLzUT5Bb4nLKqHBX83vhw== + version "1.3.5" + resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-1.3.5.tgz#cc6206ed79bb6982b878fc52e0505e4f52b62a02" + integrity sha512-VZpqfR0R7CEOJZ/0FOTgWq70lCrZyS1rkI8PXugDUkTKyyAUgZ2zQ09gLhMkEn+wN8LYeUTPxZdXtlX/kmbXKQ== dependencies: debug "^2.1.3" heimdalljs "^0.2.3" @@ -1995,7 +1918,7 @@ babel-plugin-debug-macros@^0.2.0, babel-plugin-debug-macros@^0.2.0-beta.6: dependencies: semver "^5.3.0" -babel-plugin-debug-macros@^0.3.0, babel-plugin-debug-macros@^0.3.2, babel-plugin-debug-macros@^0.3.3: +babel-plugin-debug-macros@^0.3.0, babel-plugin-debug-macros@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.3.3.tgz#29c3449d663f61c7385f5b8c72d8015b069a5cb7" integrity sha512-E+NI8TKpxJDBbVkdWkwHrKgJi696mnRL8XYrOPYw82veNHPDORM9WIQifl6TpIo8PNy2tU2skPqbfkmHXrHKQA== @@ -2021,6 +1944,14 @@ babel-plugin-feature-flags@^0.3.1: resolved "https://registry.yarnpkg.com/babel-plugin-feature-flags/-/babel-plugin-feature-flags-0.3.1.tgz#9c827cf9a4eb9a19f725ccb239e85cab02036fc1" integrity sha1-nIJ8+aTrmhn3JcyyOehcqwIDb8E= +babel-plugin-filter-imports@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/babel-plugin-filter-imports/-/babel-plugin-filter-imports-2.0.4.tgz#9209b708ed3b228349c4e6f660358bf02685e803" + integrity sha512-Ra4VylqMFsmTJCUeLRJ/OP2ZqO0cCJQK2HKihNTnoKP4f8IhxHKL4EkbmfkwGjXCeDyXd0xQ6UTK8Nd+h9V/SQ== + dependencies: + "@babel/types" "^7.1.5" + lodash "^4.17.11" + babel-plugin-filter-imports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-filter-imports/-/babel-plugin-filter-imports-3.0.0.tgz#a849683837ad29960da17492fb32789ab6b09a11" @@ -2400,6 +2331,11 @@ babel6-plugin-strip-class-callcheck@^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= +babel6-plugin-strip-heimdall@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/babel6-plugin-strip-heimdall/-/babel6-plugin-strip-heimdall-6.0.1.tgz#35f80eddec1f7fffdc009811dfbd46d9965072b6" + integrity sha1-NfgO3ewff//cAJgR371G2ZZQcrY= + babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -2487,9 +2423,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== "binaryextensions@1 || 2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.2.tgz#c83c3d74233ba7674e4f313cb2a2b70f54e94b7c" - integrity sha512-xVNN69YGDghOqCCtA6FI7avYrr02mTJjOgB0/f1VPD3pJC8QEvjTKWc4epDx8AqxxA75NI0QpVM2gPJXUbE4Tg== + version "2.2.0" + resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.2.0.tgz#e7c6ba82d4f5f5758c26078fe8eea28881233311" + integrity sha512-bHhs98rj/7i/RZpCSJ3uk55pLXOItjIrh2sRQZSM6OoktScX+LxJzvlU+FELp9j3TdcddTmmYArLSGptCTwjuw== bl@~1.0.0: version "1.0.3" @@ -2714,9 +2650,9 @@ broccoli-clean-css@^1.1.0: json-stable-stringify "^1.0.0" broccoli-concat@^3.2.2, broccoli-concat@^3.7.4: - version "3.7.4" - resolved "https://registry.yarnpkg.com/broccoli-concat/-/broccoli-concat-3.7.4.tgz#7371e846eb7a97cb44ccff10f68582bcadcafacd" - integrity sha512-9gRv1tyCQuq2+48DT9DQyxRNLOuwDtHybDeYuWA3g26HFqZd0PGAOeXcLXHpKRhxzrEbU6Gm28dZ/KolMr04cQ== + 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" @@ -2895,9 +2831,9 @@ broccoli-merge-trees@^3.0.0, broccoli-merge-trees@^3.0.1, broccoli-merge-trees@^ merge-trees "^2.0.0" broccoli-middleware@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/broccoli-middleware/-/broccoli-middleware-2.1.0.tgz#cbb458cb6360bdd79aa75a54057f10fe918157e6" - integrity sha512-ymuDaxQBKG51hKfAeDf8G0Y70rRSPS5Pu77u5HO0YsYTSSAjdZuYT2ALIlWTm+MFXYRQJIlMsqDdDNBzsvy0BQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/broccoli-middleware/-/broccoli-middleware-2.1.1.tgz#183635bbef4dc1241533ee001a162f013d776cb9" + integrity sha512-BK8aPhQpOLsHWiftrqXQr84XsvzUqeaN4PlCQOYg5yM0M+WKAHtX2WFXmicSQZOVgKDyh5aeoNTFkHjBAEBzwQ== dependencies: ansi-html "^0.0.7" handlebars "^4.0.4" @@ -2997,7 +2933,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== @@ -3018,20 +2954,22 @@ broccoli-plugin@^3.0.0: rimraf "^2.3.4" symlink-or-copy "^1.1.8" -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-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/broccoli-plugin" "^1.3.0" - broccoli-plugin "^2.0.0" - fs-tree-diff "^2.0.1" - heimdalljs "^0.2.6" + "@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 "^1.12.0" - rollup-pluginutils "^2.8.1" - symlink-or-copy "^1.2.0" - walk-sync "^1.1.3" + rollup "^0.57.1" + symlink-or-copy "^1.1.8" + walk-sync "^0.3.1" broccoli-slow-trees@^3.0.1: version "3.0.1" @@ -3205,14 +3143,14 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -browserslist@^4.6.0, browserslist@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.1.tgz#bd400d1aea56538580e8c4d5f1c54ac11b5ab468" - integrity sha512-QtULFqKIAtiyNx7NhZ/p4rB8m3xDozVo/pi5VgTlADLF2tNigz/QH+v0m5qhn7XfHT7u+607NcCNOnC0HZAlMg== +browserslist@^4.6.0, browserslist@^4.7.3: + version "4.7.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.3.tgz#02341f162b6bcc1e1028e30624815d4924442dc3" + integrity sha512-jWvmhqYpx+9EZm/FxcZSbUZyDEvDTLDi3nSAKbzEkyWvtI0mNSmUosey+5awDW1RUlrgXbQb5A6qY1xQH9U6MQ== dependencies: - caniuse-lite "^1.0.30000999" - electron-to-chromium "^1.3.284" - node-releases "^1.1.36" + caniuse-lite "^1.0.30001010" + electron-to-chromium "^1.3.306" + node-releases "^1.1.40" bser@^2.0.0: version "2.1.1" @@ -3342,6 +3280,13 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" +calculate-cache-key-for-tree@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-1.2.3.tgz#5a5e4fcfa2d374a63e47fe967593f179e8282825" + integrity sha512-PPQorvdNw8K8k7UftCeradwOmKDSDJs8wcqYTtJPEt3fHbZyK8QsorybJA+lOmk0dgE61vX6R+5Kd3W9h4EMGg== + dependencies: + json-stable-stringify "^1.0.1" + calculate-cache-key-for-tree@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-2.0.0.tgz#7ac57f149a4188eacb0a45b210689215d3fef8d6" @@ -3366,10 +3311,10 @@ can-symlink@^1.0.0: dependencies: tmp "0.0.28" -caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000999: - version "1.0.30001002" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001002.tgz#ba999a737b1abd5bf0fd47efe43a09b9cadbe9b0" - integrity sha512-pRuxPE8wdrWmVPKcDmJJiGBxr6lFJq4ivdSeo9FTmGj5Rb8NX3Mby2pARG57MXF15hYAhZ0nHV5XxT2ig4bz3g== +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001010: + version "1.0.30001011" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001011.tgz#0d6c4549c78c4a800bb043a83ca0cbe0aee6c6e1" + integrity sha512-h+Eqyn/YA6o6ZTqpS86PyRmNWOs1r54EBDcd2NTwwfsXQ8re1B38SnB+p2RKF8OUsyEIjeDU8XGec1RGO/wYCg== capture-exit@^2.0.0: version "2.0.0" @@ -3840,11 +3785,11 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.1.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.3.3.tgz#82642808cf484a35292b2f8e83ef9376884e760f" - integrity sha512-GNZkENsx5pMnS7Inwv7ZO/s3B68a9WU5kIjxqrD/tkNR8mtfXJRk8fAKRlbvWZSGPc59/TkiOBDYl5Cb65pTVA== + version "3.4.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.2.tgz#652fa7c54652b7f6586a893e37001df55ea2ac37" + integrity sha512-W0Aj+LM3EAxxjD0Kp2o4be8UlnxIZHNupBv2znqrheR4aY2nOn91794k/xoSp+SxqqriiZpTsSwBtZr60cbkwQ== dependencies: - browserslist "^4.7.1" + browserslist "^4.7.3" semver "^6.3.0" core-js@2.4.1: @@ -4002,6 +3947,13 @@ data-urls@^1.0.1: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" +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" @@ -4030,7 +3982,7 @@ debug@~3.1.0: dependencies: ms "2.0.0" -debuglog@^1.0.1: +debuglog@*, debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -4133,10 +4085,10 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= +detect-indent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== detect-libc@^1.0.2: version "1.0.3" @@ -4234,15 +4186,15 @@ 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.284, electron-to-chromium@^1.3.47: - version "1.3.292" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.292.tgz#7812fc5138619342f1dd5823df6e9cbb7d2820e9" - integrity sha512-hqkem5ANpt6mxVXmhAmlbdG8iicuyM/jEYgmP1tiHPeOLyZoTyGUzrDmJS/xyrrZy9frkW1uQcubicu7f6DS5g== +electron-to-chromium@^1.3.306, electron-to-chromium@^1.3.47: + version "1.3.312" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.312.tgz#6ef8700096e4a726b9cd7285523561629fa70e12" + integrity sha512-/Nk6Hvwt+RfS9X3oA4IXpWqpcnS7cdWsTMP4AmrP8hPpxtZbHemvTEYzjAKghk28aS9zIV8NwGHNt8H+6OmJug== elliptic@^6.0.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" - integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -4299,7 +4251,7 @@ ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0: resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.0.tgz#de3baedd093163b6c2461f95964888c1676325ac" integrity sha512-Zr4my8Xn+CzO0gIuFNXji0eTRml5AxZUTDQz/wsNJ5AJAtyFWCY4QtKdoELNNbiCVGt1lq5yLiwTm4scGKu6xA== -ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.16.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1: +ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.16.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1: version "6.18.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957" integrity sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA== @@ -4318,7 +4270,7 @@ ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6 ember-cli-version-checker "^2.1.2" semver "^5.5.0" -ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.11.0, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0: +ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.11.0, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.4.0, ember-cli-babel@^7.4.3, ember-cli-babel@^7.7.3: version "7.13.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.13.0.tgz#3f2c2ba7a44d7948ec927d41cf072673330f62cd" integrity sha512-VjagtumwQP+3jsjLR64gpca5iq2o0PS1MT0PdC90COtAYqpOqNM9axYEYBamNLIuv+3vJpAoFKu8EMBC1ZlWGQ== @@ -4529,7 +4481,7 @@ ember-cli-typescript-blueprints@^3.0.0: inflection "^1.12.0" silent-error "^1.1.0" -ember-cli-typescript@2.0.2, ember-cli-typescript@^2.0.2: +ember-cli-typescript@2.0.2, ember-cli-typescript@^2.0.0-beta.2, ember-cli-typescript@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-2.0.2.tgz#464984131fbdc05655eb61d1c3cdd911d3137f0d" integrity sha512-7I5azCTxOgRDN8aSSnJZIKSqr+MGnT+jLTUbBYqF8wu6ojs2DUnTePxUcQMcvNh3Q3B1ySv7Q/uZFSjdU9gSjA== @@ -4587,7 +4539,7 @@ ember-cli-version-checker@^2.0.0, ember-cli-version-checker@^2.1.1, ember-cli-ve resolve "^1.3.3" semver "^5.3.0" -ember-cli-version-checker@^3.0.0, ember-cli-version-checker@^3.1.2, ember-cli-version-checker@^3.1.3: +ember-cli-version-checker@^3.0.0, ember-cli-version-checker@^3.0.1, 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== @@ -4693,7 +4645,7 @@ ember-cli@~3.14.0: watch-detector "^1.0.0" yam "^1.0.0" -ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.0: +ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.0.tgz#feee16c5e9ef1b1f1e53903b241740ad4b01097e" integrity sha512-pUW4MzJdcaQtwGsErYmitFRs0rlCYBAnunVzlFFUBr4xhjlCjgHJo0b53gFnhTgenNM3d3/NqLarzRhDTjXRTg== @@ -4703,20 +4655,39 @@ ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-co semver "^5.4.1" ember-data@^3.8.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.13.1.tgz#a6b31703de9feaae19f2a0fccfc72185808174dd" - integrity sha512-1mxmnvwWXjqfjGXwukHhArJvH829pEdWXiOnZXIDLC2K1PfFHkXxBjONlssGRBPI2rS4Oaa2M6/47uAyZ4mkEA== - dependencies: - "@ember-data/-build-infra" "3.13.1" - "@ember-data/adapter" "3.13.1" - "@ember-data/model" "3.13.1" - "@ember-data/serializer" "3.13.1" - "@ember-data/store" "3.13.1" + version "3.8.1" + resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.8.1.tgz#2d2bda400c9e846e4077e250edc5b16c53fe0772" + integrity sha512-yN9AJGIR1MeNFVuvfGwVAt3/3nvtjcH+WkfKli9Y9ygB33E9/XNSivLrqlpLazT/QVLFNAKTR/XtmjJGyV6hOA== + dependencies: + "@babel/plugin-transform-block-scoping" "^7.5.5" "@ember/ordered-set" "^2.0.3" + "@ember/string" "^1.0.0" "@glimmer/env" "^0.1.7" - ember-cli-babel "^7.8.0" - ember-cli-typescript "^2.0.2" - ember-inflector "^3.0.1" + babel-plugin-feature-flags "^0.3.1" + babel-plugin-filter-imports "^2.0.4" + babel6-plugin-strip-class-callcheck "^6.0.0" + babel6-plugin-strip-heimdall "^6.0.1" + broccoli-debug "^0.6.5" + broccoli-file-creator "^2.1.1" + broccoli-funnel "^2.0.1" + broccoli-merge-trees "^3.0.2" + broccoli-rollup "^2.1.1" + calculate-cache-key-for-tree "^1.1.0" + chalk "^2.4.1" + ember-cli-babel "^7.4.3" + ember-cli-path-utils "^1.0.0" + ember-cli-string-utils "^1.1.0" + ember-cli-test-info "^1.0.0" + ember-cli-typescript "^2.0.0-beta.2" + ember-cli-version-checker "^3.0.1" + ember-inflector "^3.0.0" + git-repo-info "^2.0.0" + heimdalljs "^0.3.0" + inflection "^1.12.0" + npm-git-info "^1.0.3" + resolve "^1.8.1" + semver "^5.6.0" + silent-error "^1.1.1" ember-deep-set@^0.2.0: version "0.2.0" @@ -4731,13 +4702,11 @@ ember-disable-prototype-extensions@^1.1.3: integrity sha1-GWkTUhdlS14nj5/i2dTkm1cgMp4= ember-export-application-global@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-2.0.0.tgz#8d6d7619ac8a1a3f8c43003549eb21ebed685bd2" - integrity sha1-jW12GayKGj+MQwA1Sesh6+1oW9I= - dependencies: - ember-cli-babel "^6.0.0-beta.7" + version "2.0.1" + resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-2.0.1.tgz#b120a70e322ab208defc9e2daebe8d0dfc2dcd46" + integrity sha512-B7wiurPgsxsSGzJuPFkpBWnaeuCu2PGpG2BjyrfA1VcL7//o+5RSnZqiCEY326y7qmxb2GoCgo0ft03KBU0rRw== -ember-inflector@^3.0.1: +ember-inflector@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-3.0.1.tgz#04be6df4d7e4000f6d6bd70787cdc995f77be4ab" integrity sha512-fngrwMsnhkBt51KZgwNwQYxgURwV4lxtoHdjxf7RueGZ5zM7frJLevhHw7pbQNGqXZ3N+MRkhfNOLkdDK9kFdA== @@ -4865,9 +4834,9 @@ ember-try-config@^3.0.0: semver "^5.5.0" ember-try@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ember-try/-/ember-try-1.2.1.tgz#4118521ec3658ebeed542b426020939935bd0f26" - integrity sha512-/10g+5bvGNBoN3uN+MMGxidUj4bw0ne453aphjeFf4T/ZF1UoFTPZ8JV+g4XhdVL49zAoeTOLpsbwV0D1M+X6w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/ember-try/-/ember-try-1.3.0.tgz#394bdcd726e5acd2ebf8422c7bcf9ecf0aa2c2ac" + integrity sha512-XtVhBHNQVdVu5LouyNLhGeKx0f88lz9VtrSf1NYFulVlOHIQEeZCEIs3pTifGhtZJ0B7POPKMdPpNso77Z95uQ== dependencies: chalk "^2.4.2" cli-table3 "^0.5.1" @@ -4977,9 +4946,9 @@ errno@^0.1.3, errno@~0.1.7: prr "~1.0.1" error@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/error/-/error-7.2.0.tgz#80c989885635b41df9309d145834a4f125ae2245" - integrity sha512-M6t3j3Vt3uDicrViMP5fLq2AeADNrCVFD8Oj4Qt2MHsX0mPYG7D5XdnEfSdRpaHQzjAJ19wu+I1mw9rQYMTAPg== + version "7.2.1" + resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" + integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== dependencies: string-template "~0.2.1" @@ -5000,22 +4969,22 @@ es-abstract@^1.13.0, es-abstract@^1.5.1: string.prototype.trimright "^2.1.0" es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@^0.10.51: - version "0.10.51" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.51.tgz#ed2d7d9d48a12df86e0299287e93a09ff478842f" - integrity sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ== +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== dependencies: es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "^1.0.0" + es6-symbol "~3.1.3" + next-tick "~1.0.0" es6-iterator@~2.0.3: version "2.0.3" @@ -5026,13 +4995,13 @@ es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-symbol@^3.0.2, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.2.tgz#859fdd34f32e905ff06d752e7171ddd4444a7ed1" - integrity sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ== +es6-symbol@^3.0.2, es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== dependencies: d "^1.0.1" - es5-ext "^0.10.51" + ext "^1.1.2" escape-html@~1.0.3: version "1.0.3" @@ -5057,9 +5026,9 @@ escodegen@^1.11.0: source-map "~0.6.1" eslint-plugin-ember@^7.1.0: - version "7.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-7.5.0.tgz#4085c4a70d5f3ef9aa44c1736f966f5f6fb9653b" - integrity sha512-dWXLKFHUkXTDU/Zd/JNQ1OrbovwoXSipfReCAdIm2tbG+zaheE7LjisHzxuPg/Q8mktAaVu6l9CM4FI0+mE0IQ== + version "7.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-7.6.0.tgz#383ce9be91b3ac219046e616216d0adb32eda39a" + integrity sha512-ni+Ey2qgx3GTBvGm0px4s+Xp37ZWB7kJhvS9ZjhrZAHUVLHzberCP+Q+wxCHCu95Z564ARZe2x6W70ImDhLatA== dependencies: "@ember-data/rfc395-data" "^0.0.4" ember-rfc176-data "^0.3.12" @@ -5147,7 +5116,7 @@ eslint@^5.6.0: table "^5.2.3" text-table "^0.2.0" -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== @@ -5234,9 +5203,9 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: safe-buffer "^5.1.1" exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== execa@^1.0.0: version "1.0.0" @@ -5337,6 +5306,13 @@ express@^4.10.7, express@^4.16.4: utils-merge "1.0.1" vary "~1.1.2" +ext@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.2.0.tgz#8dd8d2dd21bcced3045be09621fa0cbf73908ba4" + integrity sha512-0ccUQK/9e3NreLFg6K6np8aPyRgwycx+oFGtfx1dSp7Wj00Ozw9r05FgBRlzjf2XBM7LAzwgLyDscRrtSU91hA== + dependencies: + type "^2.0.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -5986,7 +5962,7 @@ glob@^5.0.10: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.4, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.5: +glob@^7.0.4, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.5, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -6100,9 +6076,9 @@ growly@^1.3.0: integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= handlebars@^4.0.11, handlebars@^4.0.4, handlebars@^4.3.1: - version "4.5.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.2.tgz#5a4eb92ab5962ca3415ac188c86dc7f784f76a0f" - integrity sha512-29Zxv/cynYB7mkT1rVWQnV7mGX6v7H/miQ6dbEpYTKq5eJBN7PsRB+ViYJlcT6JINTSu4dVB9kOqEun78h6Exg== + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -6169,10 +6145,10 @@ has-symbol-support-x@^1.4.1: resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has-to-string-tag-x@^1.2.0: version "1.4.1" @@ -6464,7 +6440,7 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -6479,7 +6455,7 @@ infer-owner@^1.0.3: resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -inflection@1.12.0, inflection@^1.12.0: +inflection@^1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY= @@ -6766,6 +6742,13 @@ is-redirect@^1.0.0: resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= +is-reference@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" + integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== + dependencies: + "@types/estree" "0.0.39" + is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -6789,11 +6772,11 @@ is-stream@^2.0.0: integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: - has-symbols "^1.0.0" + has-symbols "^1.0.1" is-type@0.0.1: version "0.0.1" @@ -7148,6 +7131,11 @@ 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" @@ -7245,7 +7233,7 @@ lodash._basefor@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI= -lodash._baseindexof@^3.0.0: +lodash._baseindexof@*, lodash._baseindexof@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= @@ -7259,6 +7247,14 @@ lodash._baseisequal@^3.0.0: lodash.istypedarray "^3.0.0" lodash.keys "^3.0.0" +lodash._baseuniq@*: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= + dependencies: + lodash._createset "~4.0.0" + lodash._root "~3.0.0" + lodash._baseuniq@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-3.0.3.tgz#2123fa0db2d69c28d5beb1c1f36d61522a740234" @@ -7268,12 +7264,12 @@ lodash._baseuniq@^3.0.0: lodash._cacheindexof "^3.0.0" lodash._createcache "^3.0.0" -lodash._bindcallback@^3.0.0: +lodash._bindcallback@*, lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= -lodash._cacheindexof@^3.0.0: +lodash._cacheindexof@*, lodash._cacheindexof@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= @@ -7287,14 +7283,19 @@ lodash._createassigner@^3.0.0: lodash._isiterateecall "^3.0.0" lodash.restparam "^3.0.0" -lodash._createcache@^3.0.0: +lodash._createcache@*, lodash._createcache@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= dependencies: lodash._getnative "^3.0.0" -lodash._getnative@^3.0.0: +lodash._createset@~4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= + +lodash._getnative@*, lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= @@ -7309,6 +7310,11 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +lodash._root@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= + lodash.assign@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" @@ -7371,11 +7377,16 @@ lodash.foreach@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= -lodash.isarguments@^3.0.0: +lodash.isarguments@*, lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= +lodash.isarray@*: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-4.0.0.tgz#2aca496b28c4ca6d726715313590c02e6ea34403" + integrity sha1-KspJayjEym1yZxUxNZDALm6jRAM= + lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" @@ -7386,6 +7397,11 @@ lodash.istypedarray@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" integrity sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I= +lodash.keys@*: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" + integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU= + lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -7427,7 +7443,7 @@ lodash.pairs@^3.0.0: dependencies: lodash.keys "^3.0.0" -lodash.restparam@^3.0.0: +lodash.restparam@*, lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= @@ -7536,6 +7552,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +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" + make-array@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/make-array/-/make-array-0.1.2.tgz#335e36ebb0c5a43154d21213a1ecaeae2a1bb3ef" @@ -7744,22 +7767,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -"mime-db@>= 1.40.0 < 2": +mime-db@1.42.0, "mime-db@>= 1.40.0 < 2": version "1.42.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== mime-types@^2.1.11, mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.19, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.7: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + version "2.1.25" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" + integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== dependencies: - mime-db "1.40.0" + mime-db "1.42.0" mime@1.6.0: version "1.6.0" @@ -7903,9 +7921,9 @@ morgan@^1.9.1: on-headers "~1.0.1" mout@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mout/-/mout-1.1.0.tgz#0b29d41e6a80fa9e2d4a5be9d602e1d9d02177f6" - integrity sha512-XsP0vf4As6BfqglxZqbqQ8SR6KQot2AgxvR0gG+WtUkf90vUXchMOZQtPf/Hml1rEffJupqL/tIrU6EYhsUQjw== + version "1.2.2" + resolved "https://registry.yarnpkg.com/mout/-/mout-1.2.2.tgz#c9b718a499806a0632cede178e80f436259e777d" + integrity sha512-w0OUxFEla6z3d7sVpMZGBCpQvYh8PHS1wZ6Wu9GNKHMpAHWJ0if0LsQZh3DlOqw55HlhJEOMLpFnwtxp99Y5GA== move-concurrently@^1.0.1: version "1.0.1" @@ -7995,7 +8013,7 @@ neo-async@^2.5.0, neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== -next-tick@^1.0.0: +next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= @@ -8098,10 +8116,10 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.36: - version "1.1.38" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.38.tgz#d81b365df2936654ba37f509ba2fbe91eff2578b" - integrity sha512-/5NZAaOyTj134Oy5Cp/J8mso8OD/D9CSuL+6TOXXsTKO8yjc5e4up75SRPCganCjwFKMj2jbp5tR0dViVdox7g== +node-releases@^1.1.40: + version "1.1.41" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.41.tgz#57674a82a37f812d18e3b26118aefaf53a00afed" + integrity sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg== dependencies: semver "^6.3.0" @@ -8430,9 +8448,9 @@ object-hash@^1.3.1: integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== object-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -8691,6 +8709,11 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.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" @@ -8885,6 +8908,13 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +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.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/printf/-/printf-0.5.2.tgz#8546e01a1f647b1dff510ae92bdc92beb8c9b2f9" @@ -9031,9 +9061,9 @@ qs@6.7.0: integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== qs@^6.4.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.0.tgz#d1297e2a049c53119cb49cca366adbbacc80b409" - integrity sha512-27RP4UotQORTpmNQDX8BHPukOnBP3p1uUJY5UnDhaJB+rMt9iMsok724XL+UHU23bEFOHRMQ2ZhI99qOWUMGFA== + version "6.9.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" + integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== qs@~5.2.0: version "5.2.1" @@ -9133,9 +9163,9 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: strip-json-comments "~2.0.1" read-cmd-shim@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.4.tgz#b4a53d43376211b45243f0072b6e603a8e37640d" - integrity sha512-Pqpl3qJ/QdOIjRYA0q5DND/gLvGOfpIz/fYVDGYpOXfW/lFrIttmLsBnd6IkyK10+JHU9zhsaudfvrQTBB9YFQ== + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== dependencies: graceful-fs "^4.1.2" @@ -9239,7 +9269,7 @@ readable-stream@~2.0.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -9512,6 +9542,11 @@ require-dir@^0.3.0: resolved "https://registry.yarnpkg.com/require-dir/-/require-dir-0.3.2.tgz#c1d5c75e9fbffde9f2e6b33e383db4f594b5a6a9" integrity sha1-wdXHXp+//eny5rM+OD209ZS1pqk= +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= + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -9564,9 +9599,9 @@ resolve@1.9.0: path-parse "^1.0.6" resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.7.1, resolve@^1.8.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + version "1.12.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.2.tgz#08b12496d9aa8659c75f534a8f05f0d892fff594" + integrity sha512-cAVTI2VLHWYsGOirfeYVVQ7ZDejtQ9fp4YhYckWDEkFfqbVjaT11iM8k6xSAfGFMM+gDpZjMnFssPu8we+mqFw== dependencies: path-parse "^1.0.6" @@ -9624,21 +9659,29 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup-pluginutils@^2.8.1: +rollup-pluginutils@^2.0.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@^1.12.0: - version "1.25.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.25.1.tgz#905707d686dc8d7218af63dcfb9e37d1f3dc3c34" - integrity sha512-K8ytdEzMa6anHSnfTIs2BLB+NXlQ4qmWwdNHBpYQNWCbZAzj+DRVk7+ssbLSgddwpFW1nThr2GElR+jASF2NPA== +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/estree" "*" - "@types/node" "*" - acorn "^7.1.0" + "@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" rsvp@^3.0.14, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0: version "3.6.2" @@ -10024,11 +10067,12 @@ sort-object-keys@^1.1.2: integrity sha1-06bEjcKsl+a8lDZ2luA/bQnTeVI= sort-package-json@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.22.1.tgz#384ce7a098cd13be4109800d5ce2f0cf7826052e" - integrity sha512-uVINQraFQvnlzNHFnQOT4MYy0qonIEzKwhrI2yrTiQjNo5QF4h3ffrnCk7a95QAwoK/RdkO/w8W9tJIcaOWC7g== + version "1.23.1" + resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.23.1.tgz#7882349ad885ee6d82ff57af4184f9d6e9159e1d" + integrity sha512-dg6XChDHL+V1gPBLW4fDWsip5T94wpDVlowm8gxXsxQMxX2271zw8JM1RRbJSIrN80/UlwlRdBVkk2SuiuZ2cw== dependencies: - detect-indent "^5.0.0" + detect-indent "^6.0.0" + glob "^7.1.6" sort-object-keys "^1.1.2" sorted-object@~1.0.0: @@ -10101,6 +10145,11 @@ source-map@~0.1.x: dependencies: amdefine ">=0.0.4" +sourcemap-codec@^1.4.1: + version "1.4.6" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9" + integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg== + sourcemap-validator@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/sourcemap-validator/-/sourcemap-validator-1.1.1.tgz#3d7d8a399ccab09c1fedc510d65436e25b1c386b" @@ -10324,6 +10373,13 @@ stringstream@~0.0.4: resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== +strip-ansi@*: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + 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" @@ -10405,9 +10461,9 @@ symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8, symlink- integrity sha512-W31+GLiBmU/ZR02Ii0mVZICuNEN9daZ63xZMPDsYgPgNjMtg+atqLEGI7PPI936jYSQZxoLb/63xos8Adrx4Eg== sync-disk-cache@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-1.3.3.tgz#481933461623fdc2bdf46cfc87872ba215a7e246" - integrity sha512-Kp7DFemXDPRUbFW856CKamtX7bJuThZPa2dwnK2RfNqMew7Ah8xDc52SdooNlfN8oydDdDHlBPLsXTrtmA7HKw== + version "1.3.4" + resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-1.3.4.tgz#53a2c5a09d8f4bb53160bce182a456ad71574024" + integrity sha512-GlkGeM81GPPEKz/lH7QUTbvqLq7K/IUTuaKDSMulP9XQ42glqNJIN/RKgSOw4y8vxL1gOVvj+W7ruEO4s36eCw== dependencies: debug "^2.1.3" heimdalljs "^0.2.3" @@ -10533,9 +10589,9 @@ text-table@^0.2.0, text-table@~0.2.0: integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= "textextensions@1 || 2": - version "2.5.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.5.0.tgz#e21d3831dafa37513dd80666dff541414e314293" - integrity sha512-1IkVr355eHcomgK7fgj1Xsokturx6L5S2JRT5WcRdA6v5shk9sxWuO/w/VbpQexwkXJMQIa/j1dBi3oo7+HhcA== + version "2.6.0" + resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.6.0.tgz#d7e4ab13fe54e32e08873be40d51b74229b00fc4" + integrity sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ== through2@^2.0.0: version "2.0.5" @@ -10562,6 +10618,11 @@ through@~2.2.0, through@~2.2.7: resolved "https://registry.yarnpkg.com/through/-/through-2.2.7.tgz#6e8e21200191d4eb6a99f6f010df46aa1c6eb2bd" integrity sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0= +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= + timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -10769,6 +10830,11 @@ type@^1.0.1: resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== +type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -10799,9 +10865,9 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== uglify-js@^3.1.4: - version "3.6.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.3.tgz#1351533bbe22cc698f012589ed6bd4cbd971bff8" - integrity sha512-KfQUgOqTkLp2aZxrMbCuKCDGW9slFYu2A23A36Gs7sGzTLcRBDORdOi5E21KWHFIfkY8kzgi/Pr1cXCh0yIp5g== + version "3.6.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.9.tgz#85d353edb6ddfb62a9d798f36e91792249320611" + integrity sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw== dependencies: commander "~2.20.3" source-map "~0.6.1" @@ -11009,7 +11075,7 @@ uuid@^3.3.2, uuid@^3.3.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== -validate-npm-package-license@^3.0.1: +validate-npm-package-license@*, validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== From 49785c13a5a1f4499d8d9d6a5275e947f1e38244 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 15:55:57 -0700 Subject: [PATCH 54/75] add glimmer/tracking and remove glimmer/component --- package.json | 2 +- yarn.lock | 289 ++++++++++++++++----------------------------------- 2 files changed, 93 insertions(+), 198 deletions(-) diff --git a/package.json b/package.json index 8d9f6a28..b5159764 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "bugs": "https://github.com/poteto/ember-changeset/issues", "homepage": "https://github.com/poteto/ember-changeset", "dependencies": { - "@glimmer/component": "^1.0.0-beta.3", + "@glimmer/tracking": "^0.14.0-alpha.1", "ember-cli-babel": "^7.13.0", "ember-cli-typescript": "2.0.2", "ember-deep-set": "^0.2.0" diff --git a/yarn.lock b/yarn.lock index 490f79e1..a6778896 100644 --- a/yarn.lock +++ b/yarn.lock @@ -63,7 +63,7 @@ "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" -"@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.7.4": +"@babel/helper-create-class-features-plugin@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== @@ -620,15 +620,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.2.0" -"@babel/plugin-transform-typescript@~7.5.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz#6d862766f09b2da1cb1f7d505fe2aedab6b7d4b8" - integrity sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.2.0" - "@babel/plugin-transform-unicode-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" @@ -847,25 +838,6 @@ resolve "^1.8.1" semver "^5.6.0" -"@glimmer/component@^1.0.0-beta.3": - version "1.0.0-beta.3" - resolved "https://registry.yarnpkg.com/@glimmer/component/-/component-1.0.0-beta.3.tgz#bc466f4da776cb74bc8c6c836d6aa658f2161bee" - integrity sha512-I/NTVE8Nz0gjvAlO9mAdP0+XumRj65zqh0+J2jBDxAQHJTw9R55MTx4nvkbQteh6+sWPixFzgtt/oLzy8L9sxQ== - dependencies: - "@glimmer/di" "^0.1.9" - "@glimmer/env" "^0.1.7" - "@glimmer/util" "^0.44.0" - broccoli-file-creator "^2.1.1" - broccoli-merge-trees "^3.0.2" - ember-cli-babel "^7.7.3" - 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-typescript "3.0.0" - ember-compatibility-helpers "^1.1.2" - "@glimmer/di@^0.1.9": version "0.1.11" resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.1.11.tgz#a6878c07a13a2c2c76fcde598a5c97637bfc4280" @@ -876,11 +848,45 @@ resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.2.1.tgz#5286b6b32040232b751138f6d006130c728d4b3d" integrity sha512-0D53YVuEgGdHfTl9LGWDZqVzGhn4cT0CXqyAuOYkKFLvqboJXz6SnkRhQNPhhA2hLVrPnvUz3+choQmPhHLGGQ== +"@glimmer/encoder@^0.39.3": + version "0.39.3" + resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.39.3.tgz#4502c45c8a7ebfac80d26c5c434d1281c934f3ba" + integrity sha512-2IEdT1yloDf51L4eXlEQRqTCZxb6gzX+avg9JEL9dUmTeeKY1n6xJJgK/9OnjblkdXXG0Qp0Xxb/VwejYxoGXA== + dependencies: + "@glimmer/interfaces" "^0.39.3" + "@glimmer/vm" "^0.39.3" + "@glimmer/env@^0.1.7": version "0.1.7" resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07" integrity sha1-/S0rVakCnGs3psk16MiHGucN+gc= +"@glimmer/interfaces@^0.39.3": + version "0.39.3" + resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.39.3.tgz#1d46e1056c9ff3ce6174b82320893c027772e5f4" + integrity sha512-tmuZAUau8UbyGh4gLkpC6Vjdm0JP2dibAMMaU/yZG+SGSsQeT+bo+0XcEezscQDPihfXsBX4Z6yq98o15beYEA== + +"@glimmer/low-level@^0.39.3": + version "0.39.3" + resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.39.3.tgz#4cf4552f863d3ba0fd9352c9de8d71c6afcc5013" + integrity sha512-Kn0UWzhc0YtJQSJtPnIxGHxxu3WJa52r9CnJcbH1Et44wGwDPPJjupldMfBdDWl5Og+6u7IwKQyizFvOeHa85Q== + +"@glimmer/program@^0.39.3": + version "0.39.3" + resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.39.3.tgz#2935022b612cf0ed6c02857765d3d20e1e692ec9" + integrity sha512-nrZ/xOSA5qSOMCOR6a5xX9YWu7oJ87au5NVjBdNUsrF9E6ACh1AZOU14hmAV36pSCTfE5p+7TNERcJPNMANJmA== + dependencies: + "@glimmer/encoder" "^0.39.3" + "@glimmer/interfaces" "^0.39.3" + "@glimmer/util" "^0.39.3" + +"@glimmer/reference@^0.39.1", "@glimmer/reference@^0.39.3": + version "0.39.3" + resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.39.3.tgz#bd26ae7be0d7918d7fec458318527b9727d3756d" + integrity sha512-TmG8eL8NCVKAa2S8c5TXmz3jcS33jLfHXzRD8B3qO8UtXUzrPwClm7G4sBHKk9Nufpd4Z2qK/j3sUki0bU9wWg== + dependencies: + "@glimmer/util" "^0.39.3" + "@glimmer/resolver@^0.4.1": version "0.4.3" resolved "https://registry.yarnpkg.com/@glimmer/resolver/-/resolver-0.4.3.tgz#b1baae5c3291b4621002ccf8d7870466097e841d" @@ -888,10 +894,50 @@ dependencies: "@glimmer/di" "^0.2.0" -"@glimmer/util@^0.44.0": - version "0.44.0" - resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.44.0.tgz#45df98d73812440206ae7bda87cfe04aaae21ed9" - integrity sha512-duAsm30uVK9jSysElCbLyU6QQYO2X9iLDLBIBUcCqck9qN1o3tK2qWiHbGK5d6g8E2AJ4H88UrfElkyaJlGrwg== +"@glimmer/runtime@^0.39.1": + version "0.39.3" + resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.39.3.tgz#5a098f610222e5c4df4fda2e68508f200bd871f7" + integrity sha512-9wsMOI/3niwJ0AKzeQk6ZYrrmfceJGHCnjpHG4nlVORuRV1coLq9esN4qq+7tFFY85DHecHxPi8yuzQ3B9pffA== + dependencies: + "@glimmer/interfaces" "^0.39.3" + "@glimmer/low-level" "^0.39.3" + "@glimmer/program" "^0.39.3" + "@glimmer/reference" "^0.39.3" + "@glimmer/util" "^0.39.3" + "@glimmer/vm" "^0.39.3" + "@glimmer/wire-format" "^0.39.3" + +"@glimmer/tracking@^0.14.0-alpha.1": + version "0.14.0-alpha.1" + resolved "https://registry.yarnpkg.com/@glimmer/tracking/-/tracking-0.14.0-alpha.1.tgz#67251fa2a89a69d2bfe277587e5dec3f2abd18bd" + integrity sha512-Otn9vFEJ/xenemWej8vN6MNaUwKzupiZNB2KOFLm+lmsQ+DC/6rCIE1ftwPD5KDR3Divw/Tb6Efr2xorBqdrew== + dependencies: + "@glimmer/di" "^0.1.9" + "@glimmer/env" "^0.1.7" + "@glimmer/reference" "^0.39.1" + "@glimmer/runtime" "^0.39.1" + "@glimmer/util" "^0.39.1" + +"@glimmer/util@^0.39.1", "@glimmer/util@^0.39.3": + version "0.39.3" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.39.3.tgz#f6b0417c4b0a30f4ea693990f466e3d1eb442d37" + integrity sha512-2tzpxdgaQxMu9bHFqTpGDBYDtSWJWQZkBCFfkzCmPrJuCis3YK7m9hzYIaow7CsVLnO44Xmur+Bpq6IM9gVFXw== + +"@glimmer/vm@^0.39.3": + version "0.39.3" + resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.39.3.tgz#aa349cd28ec5e9d38001d9187278b06991a9d639" + integrity sha512-kM0ZCIJPLG5pnlAAebBtJMPF1EJ7w6wRIQwYy9Bm9o/LdkN5hYJ7AeJDjpvX/j2dolXZu6cavJplYpY7L+EAVg== + dependencies: + "@glimmer/interfaces" "^0.39.3" + "@glimmer/util" "^0.39.3" + +"@glimmer/wire-format@^0.39.3": + version "0.39.3" + resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.39.3.tgz#f41dff2a0163f990071a1ad022e02e6d0eb41019" + integrity sha512-L20UAVRtqidrJMPNJhMpvKSglK3Q7QYk8VjDJ+0cy2/sTVZIE4j5PP0Fprmr3vTEA0nhO+k/ypKyrTFZXKhGxg== + dependencies: + "@glimmer/interfaces" "^0.39.3" + "@glimmer/util" "^0.39.3" "@sindresorhus/is@^0.7.0": version "0.7.0" @@ -1406,11 +1452,6 @@ ansi-html@^0.0.7: resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= -ansi-regex@*, ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -3863,15 +3904,6 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -3982,7 +4014,7 @@ debug@~3.1.0: dependencies: ms "2.0.0" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -4499,23 +4531,6 @@ ember-cli-typescript@2.0.2, ember-cli-typescript@^2.0.0-beta.2, ember-cli-typesc stagehand "^1.0.0" walk-sync "^1.0.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" - integrity sha512-lo5YArbJzJi5ssvaGqTt6+FnhTALnSvYVuxM7lfyL1UCMudyNJ94ovH5C7n5il7ATd6WsNiAPRUO/v+s5Jq/aA== - dependencies: - "@babel/plugin-transform-typescript" "~7.5.0" - ansi-to-html "^0.6.6" - debug "^4.0.0" - ember-cli-babel-plugin-helpers "^1.0.0" - execa "^2.0.0" - fs-extra "^8.0.0" - resolve "^1.5.0" - rsvp "^4.8.1" - semver "^6.0.0" - stagehand "^1.0.0" - walk-sync "^2.0.0" - ember-cli-uglify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ember-cli-uglify/-/ember-cli-uglify-3.0.0.tgz#8819665b2cc5fe70e3ba9fe7a94645209bc42fd6" @@ -4645,7 +4660,7 @@ ember-cli@~3.14.0: watch-detector "^1.0.0" yam "^1.0.0" -ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2: +ember-compatibility-helpers@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.0.tgz#feee16c5e9ef1b1f1e53903b241740ad4b01097e" integrity sha512-pUW4MzJdcaQtwGsErYmitFRs0rlCYBAnunVzlFFUBr4xhjlCjgHJo0b53gFnhTgenNM3d3/NqLarzRhDTjXRTg== @@ -5220,21 +5235,6 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" - integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^3.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - exists-sync@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.0.4.tgz#9744c2c428cc03b01060db454d4b12f0ef3c8879" @@ -5857,13 +5857,6 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== - dependencies: - pump "^3.0.0" - get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -6440,7 +6433,7 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -6766,11 +6759,6 @@ is-stream@^1.0.0, is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -7233,7 +7221,7 @@ lodash._basefor@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI= -lodash._baseindexof@*, lodash._baseindexof@^3.0.0: +lodash._baseindexof@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= @@ -7247,14 +7235,6 @@ lodash._baseisequal@^3.0.0: lodash.istypedarray "^3.0.0" lodash.keys "^3.0.0" -lodash._baseuniq@*: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= - dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - lodash._baseuniq@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-3.0.3.tgz#2123fa0db2d69c28d5beb1c1f36d61522a740234" @@ -7264,12 +7244,12 @@ lodash._baseuniq@^3.0.0: lodash._cacheindexof "^3.0.0" lodash._createcache "^3.0.0" -lodash._bindcallback@*, lodash._bindcallback@^3.0.0: +lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= -lodash._cacheindexof@*, lodash._cacheindexof@^3.0.0: +lodash._cacheindexof@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= @@ -7283,19 +7263,14 @@ lodash._createassigner@^3.0.0: lodash._isiterateecall "^3.0.0" lodash.restparam "^3.0.0" -lodash._createcache@*, lodash._createcache@^3.0.0: +lodash._createcache@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= dependencies: lodash._getnative "^3.0.0" -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= - -lodash._getnative@*, lodash._getnative@^3.0.0: +lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= @@ -7310,11 +7285,6 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash._root@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= - lodash.assign@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" @@ -7377,16 +7347,11 @@ lodash.foreach@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= -lodash.isarguments@*, lodash.isarguments@^3.0.0: +lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= -lodash.isarray@*: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-4.0.0.tgz#2aca496b28c4ca6d726715313590c02e6ea34403" - integrity sha1-KspJayjEym1yZxUxNZDALm6jRAM= - lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" @@ -7397,11 +7362,6 @@ lodash.istypedarray@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" integrity sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I= -lodash.keys@*: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" - integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU= - lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -7443,7 +7403,7 @@ lodash.pairs@^3.0.0: dependencies: lodash.keys "^3.0.0" -lodash.restparam@*, lodash.restparam@^3.0.0: +lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= @@ -7705,11 +7665,6 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - merge-trees@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-trees/-/merge-trees-1.0.1.tgz#ccbe674569787f9def17fd46e6525f5700bbd23e" @@ -7789,11 +7744,6 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -8288,13 +8238,6 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" - integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg== - dependencies: - path-key "^3.0.0" - npm-user-validate@~0.1.2: version "0.1.5" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-0.1.5.tgz#52465d50c2d20294a57125b996baedbf56c5004b" @@ -8522,13 +8465,6 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - opener@~1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" @@ -8604,11 +8540,6 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - p-is-promise@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" @@ -8790,11 +8721,6 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -9269,7 +9195,7 @@ readable-stream@~2.0.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -9897,23 +9823,11 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -10373,13 +10287,6 @@ stringstream@~0.0.4: resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== -strip-ansi@*: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - 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" @@ -10416,11 +10323,6 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -11075,7 +10977,7 @@ uuid@^3.3.2, uuid@^3.3.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== -validate-npm-package-license@*, validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -11148,7 +11050,7 @@ walk-sync@^1.0.0, walk-sync@^1.1.3: ensure-posix-path "^1.1.0" matcher-collection "^1.1.1" -walk-sync@^2.0.0, walk-sync@^2.0.2: +walk-sync@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-2.0.2.tgz#5ea8a28377c8be68c92d50f4007ea381725da14b" integrity sha512-dCZkrxfHjPn7tIvdYrX3uMD/R0beVrHpA8lROQ5wWrl8psJgR6xwCkwqTFes0dNujbS2o/ITpvSYgIFsLsf13A== @@ -11286,13 +11188,6 @@ which@1, which@^1.2.14, which@^1.2.9, which@^1.3.0: dependencies: isexe "^2.0.0" -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - which@~1.2.1: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" From a4499dc167ca70b9e4440094c0ac0b7523bfd857 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 17:11:02 -0700 Subject: [PATCH 55/75] skipLibCheck --- addon/-private/validated-changeset.ts | 2 +- addon/index.ts | 9 ++-- package.json | 2 +- tsconfig.json | 1 + yarn.lock | 64 ++++++++++++++++++++++----- 5 files changed, 58 insertions(+), 20 deletions(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 0dfa63e1..e5b6dc0a 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -53,7 +53,7 @@ const defaultOptions = { skipValidate: false }; export class BufferedChangeset implements IChangeset { constructor( - obj: object, + obj: any, public validateFn: ValidatorAction = defaultValidatorFn, public validationMap: ValidatorMap = {}, options: Config = {} diff --git a/addon/index.ts b/addon/index.ts index 327d1d97..6079976d 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -24,12 +24,9 @@ const CONTENT = '_content'; const defaultValidatorFn = () => true; class EmberChangeset extends BufferedChangeset { - @tracked - CHANGES: Changes = {}; - @tracked - ERRORS: Errors = {}; - @tracked - CONTENT: object | undefined; + @tracked '_changes': Changes; + @tracked '_errors': Errors; + @tracked '_content': any; getDeep = safeGet as any; diff --git a/package.json b/package.json index b5159764..a47be2f1 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "ember-cli": "~3.14.0", "ember-cli-dependency-checker": "^3.1.0", "ember-cli-eslint": "^5.1.0", - "ember-cli-htmlbars": "^4.0.5", + "ember-cli-htmlbars": "^4.0.7", "ember-cli-inject-live-reload": "^2.0.1", "ember-cli-release": "^1.0.0-beta.2", "ember-cli-shims": "^1.2.0", diff --git a/tsconfig.json b/tsconfig.json index 8a6d944e..f7fd65ef 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,6 +20,7 @@ "inlineSources": true, "baseUrl": ".", "module": "es6", + "skipLibCheck": true, "paths": { "dummy/tests/*": [ "tests/*" diff --git a/yarn.lock b/yarn.lock index a6778896..ccf3e621 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1452,6 +1452,11 @@ ansi-html@^0.0.7: resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= +ansi-regex@*, ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -4014,7 +4019,7 @@ debug@~3.1.0: dependencies: ms "2.0.0" -debuglog@^1.0.1: +debuglog@*, debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -4377,7 +4382,7 @@ ember-cli-htmlbars-inline-precompile@^2.1.0: heimdalljs-logger "^0.1.9" silent-error "^1.1.0" -ember-cli-htmlbars@^4.0.5: +ember-cli-htmlbars@^4.0.7: version "4.0.8" resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-4.0.8.tgz#e87b62e7040bd478a2d007053bdb1644dd1685b0" integrity sha512-B6fzlqmv2E2dl8P6UIYu3bY8nZU2kKfl1VkEIgxFAINfsu9fP65kX/bKzHqGhHF8nAtWBoXZWw6tomHKfUT/Jg== @@ -6433,7 +6438,7 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -7221,7 +7226,7 @@ lodash._basefor@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI= -lodash._baseindexof@^3.0.0: +lodash._baseindexof@*, lodash._baseindexof@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= @@ -7235,6 +7240,14 @@ lodash._baseisequal@^3.0.0: lodash.istypedarray "^3.0.0" lodash.keys "^3.0.0" +lodash._baseuniq@*: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= + dependencies: + lodash._createset "~4.0.0" + lodash._root "~3.0.0" + lodash._baseuniq@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-3.0.3.tgz#2123fa0db2d69c28d5beb1c1f36d61522a740234" @@ -7244,12 +7257,12 @@ lodash._baseuniq@^3.0.0: lodash._cacheindexof "^3.0.0" lodash._createcache "^3.0.0" -lodash._bindcallback@^3.0.0: +lodash._bindcallback@*, lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= -lodash._cacheindexof@^3.0.0: +lodash._cacheindexof@*, lodash._cacheindexof@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= @@ -7263,14 +7276,19 @@ lodash._createassigner@^3.0.0: lodash._isiterateecall "^3.0.0" lodash.restparam "^3.0.0" -lodash._createcache@^3.0.0: +lodash._createcache@*, lodash._createcache@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= dependencies: lodash._getnative "^3.0.0" -lodash._getnative@^3.0.0: +lodash._createset@~4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= + +lodash._getnative@*, lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= @@ -7285,6 +7303,11 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +lodash._root@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= + lodash.assign@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" @@ -7347,11 +7370,16 @@ lodash.foreach@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= -lodash.isarguments@^3.0.0: +lodash.isarguments@*, lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= +lodash.isarray@*: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-4.0.0.tgz#2aca496b28c4ca6d726715313590c02e6ea34403" + integrity sha1-KspJayjEym1yZxUxNZDALm6jRAM= + lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" @@ -7362,6 +7390,11 @@ lodash.istypedarray@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" integrity sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I= +lodash.keys@*: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" + integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU= + lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -7403,7 +7436,7 @@ lodash.pairs@^3.0.0: dependencies: lodash.keys "^3.0.0" -lodash.restparam@^3.0.0: +lodash.restparam@*, lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= @@ -9195,7 +9228,7 @@ readable-stream@~2.0.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -10287,6 +10320,13 @@ stringstream@~0.0.4: resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== +strip-ansi@*: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + 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" @@ -10977,7 +11017,7 @@ uuid@^3.3.2, uuid@^3.3.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== -validate-npm-package-license@^3.0.1: +validate-npm-package-license@*, validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== From a8feb0e721d2a4465198178a21ca6da4bb3f4443 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 17:49:59 -0700 Subject: [PATCH 56/75] need one? --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f566afc4..a513e9d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,7 +48,7 @@ jobs: # we recommend new addons test the current and previous LTS # as well as latest stable release (bonus points to beta/canary) - stage: "Additional Tests" - - env: EMBER_TRY_SCENARIO=ember-release + env: EMBER_TRY_SCENARIO=ember-release - env: EMBER_TRY_SCENARIO=ember-beta - env: EMBER_TRY_SCENARIO=ember-canary - env: EMBER_TRY_SCENARIO=ember-default-with-jquery From a5085d2f37963b1e66c70b862759184a99c56c3f Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 17:52:47 -0700 Subject: [PATCH 57/75] 3.13 --- .travis.yml | 3 ++- config/ember-try.js | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a513e9d9..f37ee59f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,7 +48,8 @@ jobs: # we recommend new addons test the current and previous LTS # as well as latest stable release (bonus points to beta/canary) - stage: "Additional Tests" - env: EMBER_TRY_SCENARIO=ember-release + env: EMBER_TRY_SCENARIO=ember-3.13 + - env: EMBER_TRY_SCENARIO=ember-release - env: EMBER_TRY_SCENARIO=ember-beta - env: EMBER_TRY_SCENARIO=ember-canary - env: EMBER_TRY_SCENARIO=ember-default-with-jquery diff --git a/config/ember-try.js b/config/ember-try.js index 9c3ceab6..814fc47b 100644 --- a/config/ember-try.js +++ b/config/ember-try.js @@ -6,6 +6,14 @@ module.exports = async function() { return { useYarn: true, scenarios: [ + { + name: 'ember-3.13', + npm: { + devDependencies: { + 'ember-source': '~3.13.0' + } + } + }, { name: 'ember-release', npm: { From 768026a9b76d98ee286dd4f4bfb163734b12412e Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 18:00:18 -0700 Subject: [PATCH 58/75] qunit codemod --- tests/unit/utils/get-deep-test.js | 2 +- tests/unit/utils/is-changeset-test.js | 18 ++--- tests/unit/utils/is-object-test.js | 50 ++++++------ tests/unit/utils/is-promise-test.js | 80 ++++++++++---------- tests/unit/utils/merge-nested-test.js | 12 +-- tests/unit/utils/normalize-object-test.js | 2 +- tests/unit/utils/object-without-test.js | 20 ++--- tests/unit/utils/set-deep-test.js | 2 +- tests/unit/utils/take-test.js | 22 +++--- tests/unit/utils/validate-nested-obj-test.js | 10 +-- 10 files changed, 109 insertions(+), 109 deletions(-) diff --git a/tests/unit/utils/get-deep-test.js b/tests/unit/utils/get-deep-test.js index 59eacce6..199ce35b 100644 --- a/tests/unit/utils/get-deep-test.js +++ b/tests/unit/utils/get-deep-test.js @@ -1,5 +1,5 @@ import getDeep from 'ember-changeset/utils/get-deep'; -import { module, test } from 'ember-qunit'; +import { module, test } from 'qunit'; module('Unit | Utility | get deep', () => { test('it returns value', async function(assert) { diff --git a/tests/unit/utils/is-changeset-test.js b/tests/unit/utils/is-changeset-test.js index 2d4355af..52ab91cd 100644 --- a/tests/unit/utils/is-changeset-test.js +++ b/tests/unit/utils/is-changeset-test.js @@ -3,14 +3,14 @@ import EmberObject from '@ember/object'; import isChangeset from 'ember-changeset/utils/is-changeset'; import { module, test } from 'qunit'; -module('Unit | Utility | is changeset'); +module('Unit | Utility | is changeset', function() { + test('it correctly identifies changesets', async function(assert) { + let dummy = new Changeset(EmberObject.create()); + assert.ok(isChangeset(dummy), 'should be true'); + }); -test('it correctly identifies changesets', async function(assert) { - let dummy = new Changeset(EmberObject.create()); - assert.ok(isChangeset(dummy), 'should be true'); -}); - -test('it correctly identifies non-changesets', async function(assert) { - let dummy = EmberObject.create(); - assert.notOk(isChangeset(dummy), 'should be false'); + test('it correctly identifies non-changesets', async function(assert) { + let dummy = EmberObject.create(); + assert.notOk(isChangeset(dummy), 'should be false'); + }); }); diff --git a/tests/unit/utils/is-object-test.js b/tests/unit/utils/is-object-test.js index 6c73ef25..d5b4aa9a 100644 --- a/tests/unit/utils/is-object-test.js +++ b/tests/unit/utils/is-object-test.js @@ -3,31 +3,31 @@ import ObjectProxy from '@ember/object/proxy'; import isObject from 'ember-changeset/utils/is-object'; import { module, test } from 'qunit'; -module('Unit | Utility | is object'); +module('Unit | Utility | is object', function() { + let testData = [ + { + label: 'POJOs', + value: { foo: 'bar' }, + expected: true + }, + { + label: 'EmberObjects', + value: EmberObject.create({ foo: 'bar' }), + expected: true + }, + { + label: 'ObjectProxies', + value: ObjectProxy.create({ + content: EmberObject.create({ foo: 'bar' }) + }), + expected: true + } + ]; -let testData = [ - { - label: 'POJOs', - value: { foo: 'bar' }, - expected: true - }, - { - label: 'EmberObjects', - value: EmberObject.create({ foo: 'bar' }), - expected: true - }, - { - label: 'ObjectProxies', - value: ObjectProxy.create({ - content: EmberObject.create({ foo: 'bar' }) - }), - expected: true - } -]; - -testData.forEach(({ label, value, expected }) => { - test(`it works with ${label}`, async function(assert) { - let result = isObject(value); - assert.equal(result, expected, `should be ${expected}`); + testData.forEach(({ label, value, expected }) => { + test(`it works with ${label}`, async function(assert) { + let result = isObject(value); + assert.equal(result, expected, `should be ${expected}`); + }); }); }); diff --git a/tests/unit/utils/is-promise-test.js b/tests/unit/utils/is-promise-test.js index a14beb98..d4484079 100644 --- a/tests/unit/utils/is-promise-test.js +++ b/tests/unit/utils/is-promise-test.js @@ -1,47 +1,47 @@ import isPromise from 'ember-changeset/utils/is-promise'; import { module, test } from 'qunit'; -module('Unit | Utility | is promise'); +module('Unit | Utility | is promise', function() { + let testData = [ + { + value: Promise.resolve('foo'), + expected: true + }, + { + value: new Promise((resolve) => resolve('blah')), + expected: true + }, + { + value: { then() {}, catch() {}, finally() {} }, + expected: true + }, + { + value: { then() {} }, + expected: false + }, + { + value: 'blah', + expected: false + }, + { + value: 42, + expected: false + }, + { + value: ['meow'], + expected: false + }, + { + value: null, + expected: false + } + ]; -let testData = [ - { - value: Promise.resolve('foo'), - expected: true - }, - { - value: new Promise((resolve) => resolve('blah')), - expected: true - }, - { - value: { then() {}, catch() {}, finally() {} }, - expected: true - }, - { - value: { then() {} }, - expected: false - }, - { - value: 'blah', - expected: false - }, - { - value: 42, - expected: false - }, - { - value: ['meow'], - expected: false - }, - { - value: null, - expected: false - } -]; + testData.forEach(({ value, expected }) => { + test('it checks if an object is an instance of an RSVP.Promise', async function(assert) { + let result = isPromise(value); -testData.forEach(({ value, expected }) => { - test('it checks if an object is an instance of an RSVP.Promise', async function(assert) { - let result = isPromise(value); - - assert.equal(result, expected, `should be ${expected}`); + assert.equal(result, expected, `should be ${expected}`); + }); }); }); diff --git a/tests/unit/utils/merge-nested-test.js b/tests/unit/utils/merge-nested-test.js index 5becdf73..02bffefd 100644 --- a/tests/unit/utils/merge-nested-test.js +++ b/tests/unit/utils/merge-nested-test.js @@ -1,10 +1,10 @@ import mergeNested from 'ember-changeset/utils/merge-nested'; import { module, test } from 'qunit'; -module('Unit | Utility | merge nested'); - -// Replace this with your real tests. -test('it works', async function(assert) { - let result = mergeNested(); - assert.ok(result); +module('Unit | Utility | merge nested', function() { + // Replace this with your real tests. + test('it works', async function(assert) { + let result = mergeNested(); + assert.ok(result); + }); }); diff --git a/tests/unit/utils/normalize-object-test.js b/tests/unit/utils/normalize-object-test.js index f00a13ef..c4c89371 100644 --- a/tests/unit/utils/normalize-object-test.js +++ b/tests/unit/utils/normalize-object-test.js @@ -1,5 +1,5 @@ import normalizeObject from 'ember-changeset/utils/normalize-object'; -import { module, test } from 'ember-qunit'; +import { module, test } from 'qunit'; module('Unit | Utility | normalize object', () => { test('it returns value', async function(assert) { diff --git a/tests/unit/utils/object-without-test.js b/tests/unit/utils/object-without-test.js index 4523a747..8fbb7e15 100644 --- a/tests/unit/utils/object-without-test.js +++ b/tests/unit/utils/object-without-test.js @@ -1,15 +1,15 @@ import objectWithout from 'ember-changeset/utils/object-without'; import { module, test } from 'qunit'; -module('Unit | Utility | object without'); +module('Unit | Utility | object without', function() { + test('it exludes the given keys from all merged objects', async function(assert) { + let objA = { name: 'Ivan' }; + let objB = { name: 'John' }; + let objC = { age: 27 }; + let objD = objectWithout([ 'age' ], objA, objB, objC); -test('it exludes the given keys from all merged objects', async function(assert) { - let objA = { name: 'Ivan' }; - let objB = { name: 'John' }; - let objC = { age: 27 }; - let objD = objectWithout([ 'age' ], objA, objB, objC); - - assert.deepEqual(objD, { name: 'John' }, 'result only contains name'); - assert.deepEqual(objA.name, 'Ivan', 'does not mutate original object'); - assert.deepEqual(objC.age, 27, 'does not mutate original object'); + assert.deepEqual(objD, { name: 'John' }, 'result only contains name'); + assert.deepEqual(objA.name, 'Ivan', 'does not mutate original object'); + assert.deepEqual(objC.age, 27, 'does not mutate original object'); + }); }); diff --git a/tests/unit/utils/set-deep-test.js b/tests/unit/utils/set-deep-test.js index 56c567e5..d57c8faf 100644 --- a/tests/unit/utils/set-deep-test.js +++ b/tests/unit/utils/set-deep-test.js @@ -1,5 +1,5 @@ import setDeep from 'ember-changeset/utils/set-deep'; -import { module, test } from 'ember-qunit'; +import { module, test } from 'qunit'; module('Unit | Utility | set deep', () => { test('it sets value', async function(assert) { diff --git a/tests/unit/utils/take-test.js b/tests/unit/utils/take-test.js index be2285c9..03d0c7fb 100644 --- a/tests/unit/utils/take-test.js +++ b/tests/unit/utils/take-test.js @@ -1,16 +1,16 @@ import take from 'ember-changeset/utils/take'; import { module, test } from 'qunit'; -module('Unit | Utility | take'); +module('Unit | Utility | take', function() { + test('it returns an object with only the specified keys', async function(assert) { + let employee = { + name: 'Milton Waddams', + stapler: 'Red', + deskLocation: 'basement' + }; + let expectedResult = { name: 'Milton Waddams', deskLocation: 'basement' }; + let result = take(employee, ['name', 'deskLocation']); -test('it returns an object with only the specified keys', async function(assert) { - let employee = { - name: 'Milton Waddams', - stapler: 'Red', - deskLocation: 'basement' - }; - let expectedResult = { name: 'Milton Waddams', deskLocation: 'basement' }; - let result = take(employee, ['name', 'deskLocation']); - - assert.deepEqual(result, expectedResult, 'it returns an object with only the specified keys'); + assert.deepEqual(result, expectedResult, 'it returns an object with only the specified keys'); + }); }); diff --git a/tests/unit/utils/validate-nested-obj-test.js b/tests/unit/utils/validate-nested-obj-test.js index 89c59bd9..f5e4cbd2 100644 --- a/tests/unit/utils/validate-nested-obj-test.js +++ b/tests/unit/utils/validate-nested-obj-test.js @@ -1,9 +1,9 @@ // import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; import { module, test } from 'qunit'; -module('Unit | Utility | validate nested obj'); - -// Replace this with your real tests. -test('it works', async function(assert) { - assert.ok(true); +module('Unit | Utility | validate nested obj', function() { + // Replace this with your real tests. + test('it works', async function(assert) { + assert.ok(true); + }); }); From 0f0d6cfd69a56b4fc1d5ef11a4be94ec8d651b4b Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 18:25:29 -0700 Subject: [PATCH 59/75] isobject into own property @makepanic --- addon/utils/set-deep.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addon/utils/set-deep.ts b/addon/utils/set-deep.ts index a2840b1d..0113ea63 100644 --- a/addon/utils/set-deep.ts +++ b/addon/utils/set-deep.ts @@ -20,9 +20,10 @@ export default function setDeep(target: any, path: string, value: unknown): any for (let i = 0; i < keys.length; i++) { let prop = keys[i]; - if (!isObject(target[prop])) { + const obj = isObject(target[prop]); + if (!obj) { target[prop] = {}; - } else if (isObject(target[prop]) && target[prop] instanceof Change) { + } else if (obj && target[prop] instanceof Change) { // we don't want to merge new changes with a Change instance higher up in the obj tree target[prop] = {}; } From b4fdcd40c1777d2cd3b765d2acd5ba88c5ca9f41 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sat, 23 Nov 2019 19:26:58 -0700 Subject: [PATCH 60/75] cleanup --- addon/types/index.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/addon/types/index.ts b/addon/types/index.ts index 398152f5..99ebc2ce 100644 --- a/addon/types/index.ts +++ b/addon/types/index.ts @@ -81,12 +81,6 @@ export interface ChangesetDef { isInvalid: boolean, isDirty: boolean, - // _super: (...args: Array) => void, - // notifyPropertyChange: (s: string) => void, - // trigger: (k: string, v?: string | void) => void, - // init: () => void, - // unknownProperty: (s: string) => any, - // setUnknownProperty: (key: string, value: T) => (T | IErr | Promise | Promise> | ValidationResult), get: (key: string) => any, set: (key: string, value: T) => (void | T | IErr | Promise | Promise> | ValidationResult), getDeep: any; From 9c08ce22a18f4768b76bf0c054efc71837d95d86 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 24 Nov 2019 08:22:05 -0700 Subject: [PATCH 61/75] format --- addon/utils/merge-deep.ts | 70 +++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/addon/utils/merge-deep.ts b/addon/utils/merge-deep.ts index 3725e7d3..7d9bc6ad 100644 --- a/addon/utils/merge-deep.ts +++ b/addon/utils/merge-deep.ts @@ -18,30 +18,30 @@ function isSpecial(value: any): Boolean { } function getEnumerableOwnPropertySymbols(target: any): any { - return Object.getOwnPropertySymbols - ? Object.getOwnPropertySymbols(target).filter(symbol => { - return target.propertyIsEnumerable(symbol) - }) - : []; + return Object.getOwnPropertySymbols + ? Object.getOwnPropertySymbols(target).filter(symbol => { + return target.propertyIsEnumerable(symbol) + }) + : []; } function getKeys(target: any) { - return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target)) + return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target)) } function propertyIsOnObject(object: any, property: any) { - try { - return property in object; - } catch(_) { - return false; - } + try { + return property in object; + } catch (_) { + return false; + } } // Protects from prototype poisoning and unexpected merging up the prototype chain. function propertyIsUnsafe(target: any, key: string): Boolean { return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet, - && !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain, - && Object.propertyIsEnumerable.call(target, key)); // and also unsafe if they're nonenumerable. + && !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain, + && Object.propertyIsEnumerable.call(target, key)); // and also unsafe if they're nonenumerable. } /** @@ -75,9 +75,9 @@ function buildPathToValue(source: any, options: Options, kv: Record * @method mergeObject */ function mergeObject(target: any, source: any, options: Options): any { - getKeys(source).forEach(key => { + getKeys(source).forEach(key => { // proto poisoning. So can set by nested key path 'person.name' - if (propertyIsUnsafe(target, key)) { + if (propertyIsUnsafe(target, key)) { // if safeSet, we will find keys leading up to value and set if (options.safeSet) { const kv: Record = buildPathToValue(source, options, {}, []); @@ -90,18 +90,18 @@ function mergeObject(target: any, source: any, options: Options): any { } } - return; - } + return; + } // else safe key on object - if (propertyIsOnObject(target, key) && isMergeableObject(source[key]) && !source[key].hasOwnProperty('value')) { - target[key] = mergeDeep(options.safeGet(target, key), options.safeGet(source, key), options); - } else { + if (propertyIsOnObject(target, key) && isMergeableObject(source[key]) && !source[key].hasOwnProperty('value')) { + target[key] = mergeDeep(options.safeGet(target, key), options.safeGet(source, key), options); + } else { return target[key] = source[key].value; - } + } }); - return target; + return target; } /** @@ -116,17 +116,17 @@ function mergeObject(target: any, source: any, options: Options): any { * @param source */ export default function mergeDeep(target: any, source: any, options: Options = { safeGet: undefined, safeSet: undefined }): object | [any] { - options.safeGet = options.safeGet || function(obj: any, key: string): any { return obj[key] }; - options.safeSet = options.safeSet; - let sourceIsArray = Array.isArray(source); - let targetIsArray = Array.isArray(target); - let sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; - - if (!sourceAndTargetTypesMatch) { - return source; - } else if (sourceIsArray) { - return source; - } else { - return mergeObject(target, source, options); - } + options.safeGet = options.safeGet || function (obj: any, key: string): any { return obj[key] }; + options.safeSet = options.safeSet; + let sourceIsArray = Array.isArray(source); + let targetIsArray = Array.isArray(target); + let sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; + + if (!sourceAndTargetTypesMatch) { + return source; + } else if (sourceIsArray) { + return source; + } else { + return mergeObject(target, source, options); + } } From 4eac8fdef04aff6529fcd7b0535b8c10f1c84dbf Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 24 Nov 2019 08:26:58 -0700 Subject: [PATCH 62/75] add back assertions --- addon/utils/merge-deep.ts | 2 -- tests/unit/changeset-test.js | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/addon/utils/merge-deep.ts b/addon/utils/merge-deep.ts index 7d9bc6ad..02b55b8b 100644 --- a/addon/utils/merge-deep.ts +++ b/addon/utils/merge-deep.ts @@ -112,8 +112,6 @@ function mergeObject(target: any, source: any, options: Options): any { * to handle properties on Proxy objects (that aren't the target's own property) * * @method mergeDeep - * @param target - * @param source */ export default function mergeDeep(target: any, source: any, options: Options = { safeGet: undefined, safeSet: undefined }): object | [any] { options.safeGet = options.safeGet || function (obj: any, key: string): any { return obj[key] }; diff --git a/tests/unit/changeset-test.js b/tests/unit/changeset-test.js index 7811963e..6b4de2ec 100644 --- a/tests/unit/changeset-test.js +++ b/tests/unit/changeset-test.js @@ -1316,8 +1316,8 @@ module('Unit | Utility | changeset', function(hooks) { assert.ok(get(dummyChangeset, 'isInvalid'), 'should be invalid'); assert.equal(get(dummyChangeset, 'error.email.localPart.validation'), 'Cannot contain +', 'should add the error'); - // dummyChangeset.set('email.localPart', 'ok'); - // assert.ok(get(dummyChangeset, 'isValid'), 'should be valid'); + dummyChangeset.set('email.localPart', 'ok'); + assert.ok(get(dummyChangeset, 'isValid'), 'should be valid'); }); test('#addError adds an array of errors to the changeset', async function(assert) { From 92156799829fcc3da05e58b6a452a65ecfb8ddf4 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 24 Nov 2019 08:59:24 -0700 Subject: [PATCH 63/75] add some mergeDeep tests --- addon/utils/merge-deep.ts | 18 +++++++++----- addon/utils/set-deep.ts | 1 + tests/unit/utils/merge-deep-test.js | 37 +++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 tests/unit/utils/merge-deep-test.js diff --git a/addon/utils/merge-deep.ts b/addon/utils/merge-deep.ts index 02b55b8b..0db95262 100644 --- a/addon/utils/merge-deep.ts +++ b/addon/utils/merge-deep.ts @@ -46,7 +46,7 @@ function propertyIsUnsafe(target: any, key: string): Boolean { /** * DFS - traverse depth first until find object with `value`. Then go back up tree and try on next key - * need to exhaust all possible avenues. + * Need to exhaust all possible avenues. * * @method buildPathToValue */ @@ -56,7 +56,6 @@ function buildPathToValue(source: any, options: Options, kv: Record if (possible && possible.hasOwnProperty('value')) { possibleKeys.push(key); kv[possibleKeys.join('.')] = possible.value; - // reset return; } @@ -72,15 +71,16 @@ function buildPathToValue(source: any, options: Options, kv: Record /** * `source` will always have a leaf key `value` with the property we want to set * - * @method mergeObject + * @method mergeTargetAndSource */ -function mergeObject(target: any, source: any, options: Options): any { +function mergeTargetAndSource(target: any, source: any, options: Options): any { getKeys(source).forEach(key => { // proto poisoning. So can set by nested key path 'person.name' if (propertyIsUnsafe(target, key)) { // if safeSet, we will find keys leading up to value and set if (options.safeSet) { const kv: Record = buildPathToValue(source, options, {}, []); + // each key will be a path nested to the value `person.name.other` if (Object.keys(kv).length > 0) { // we found some keys! for (key in kv) { @@ -97,7 +97,13 @@ function mergeObject(target: any, source: any, options: Options): any { if (propertyIsOnObject(target, key) && isMergeableObject(source[key]) && !source[key].hasOwnProperty('value')) { target[key] = mergeDeep(options.safeGet(target, key), options.safeGet(source, key), options); } else { - return target[key] = source[key].value; + let next = source[key]; + if (next && next.value) { + return target[key] = next.value; + } + + // if just some normal leaf value, then set + return target[key] = next; } }); @@ -125,6 +131,6 @@ export default function mergeDeep(target: any, source: any, options: Options = { } else if (sourceIsArray) { return source; } else { - return mergeObject(target, source, options); + return mergeTargetAndSource(target, source, options); } } diff --git a/addon/utils/set-deep.ts b/addon/utils/set-deep.ts index 0113ea63..bd871e83 100644 --- a/addon/utils/set-deep.ts +++ b/addon/utils/set-deep.ts @@ -1,4 +1,5 @@ import Change from '../-private/change'; + /** * TODO: consider * https://github.com/emberjs/ember.js/blob/822452c4432620fc67a777aba3b150098fd6812d/packages/%40ember/-internals/metal/lib/property_set.ts diff --git a/tests/unit/utils/merge-deep-test.js b/tests/unit/utils/merge-deep-test.js new file mode 100644 index 00000000..ead0b832 --- /dev/null +++ b/tests/unit/utils/merge-deep-test.js @@ -0,0 +1,37 @@ +import mergeDeep from 'ember-changeset/utils/merge-deep'; +import { module, test } from 'qunit'; +import { get, set } from '@ember/object'; + +module('Unit | Utility | merge deep', () => { + test('it returns merged objects', async function(assert) { + let objA = { other: 'Ivan' }; + let objB = { foo: { value: 'bar' }, zoo: 'doo' }; + let value = mergeDeep(objA, objB); + + assert.deepEqual(value, { other: 'Ivan', foo: 'bar', zoo: 'doo' }, 'merges both values'); + }); + + test('it unsets', async function(assert) { + let objA = { other: 'Ivan' }; + let objB = { other: null }; + let value = mergeDeep(objA, objB); + + assert.deepEqual(value, { other: null }, 'unsets value'); + }); + + test('it works with Ember.get and Ember.set', async function(assert) { + let objA = { other: 'Ivan' }; + let objB = { other: null }; + let value = mergeDeep(objA, objB, { safeGet: get, safeSet: set }); + + assert.deepEqual(value, { other: null }, 'unsets value'); + }); + + test('it works with deeper nested objects', async function(assert) { + let objA = { company: { employees: ['Ivan', 'Jan'] } }; + let objB = { company: { employees: { value: ['Jull', 'Olafur'] } } }; + let value = mergeDeep(objA, objB); + + assert.deepEqual(value, { company: { employees: ['Jull', 'Olafur']} }, 'has right employees'); + }); +}); From f3739258bfa439418c9bc3b65f894706f0814eda Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 24 Nov 2019 09:02:16 -0700 Subject: [PATCH 64/75] remove validate nested obj utility --- addon/-private/validated-changeset.ts | 5 ----- addon/utils/validate-nested-obj.ts | 15 --------------- tests/unit/utils/validate-nested-obj-test.js | 9 --------- 3 files changed, 29 deletions(-) delete mode 100644 addon/utils/validate-nested-obj.ts delete mode 100644 tests/unit/utils/validate-nested-obj-test.js diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index e5b6dc0a..e83117eb 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -15,7 +15,6 @@ import isPromise from 'ember-changeset/utils/is-promise'; import mergeNested from 'ember-changeset/utils/merge-nested'; import objectWithout from 'ember-changeset/utils/object-without'; import take from 'ember-changeset/utils/take'; -import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; import mergeDeep from 'ember-changeset/utils/merge-deep'; import setDeep from 'ember-changeset/utils/set-deep'; import getDeep from 'ember-changeset/utils/get-deep'; @@ -261,7 +260,6 @@ export class BufferedChangeset implements IChangeset { let preparedChanges = prepareChangesFn(changes); assert('Callback to `changeset.prepare` must return an object', isObject(preparedChanges)); - validateNestedObj('preparedChanges', preparedChanges); let newObj: Changes = {}; let newChanges: Changes = keys(preparedChanges).reduce((newObj: Changes, key: keyof Changes) => { @@ -552,9 +550,6 @@ export class BufferedChangeset implements IChangeset { * @method restore */ restore({ changes, errors }: Snapshot): IChangeset { - validateNestedObj('snapshot.changes', changes); - validateNestedObj('snapshot.errors', errors); - let newChanges: Changes = keys(changes).reduce((newObj: Changes, key: keyof Changes) => { newObj[key] = new Change(changes[key]); return newObj; diff --git a/addon/utils/validate-nested-obj.ts b/addon/utils/validate-nested-obj.ts deleted file mode 100644 index 9f1c6df0..00000000 --- a/addon/utils/validate-nested-obj.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { assert } from '@ember/debug'; - -const { keys } = Object; - -export default function validateNestedObj(label: string, obj: object): void { - keys(obj).forEach(key => { - key.split('.').forEach((_, i, allParts) => { - if (i < allParts.length - 1) { - let path = allParts.slice(0, i+1).join('.'); - let msg = `Object "${label}" may not have keys that override each other.`; - assert(msg, !(path in obj)); - } - }); - }) -} diff --git a/tests/unit/utils/validate-nested-obj-test.js b/tests/unit/utils/validate-nested-obj-test.js deleted file mode 100644 index f5e4cbd2..00000000 --- a/tests/unit/utils/validate-nested-obj-test.js +++ /dev/null @@ -1,9 +0,0 @@ -// import validateNestedObj from 'ember-changeset/utils/validate-nested-obj'; -import { module, test } from 'qunit'; - -module('Unit | Utility | validate nested obj', function() { - // Replace this with your real tests. - test('it works', async function(assert) { - assert.ok(true); - }); -}); From bc55557d6b490c8d70642409e1aa4bbc6689b798 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 24 Nov 2019 09:17:27 -0700 Subject: [PATCH 65/75] use Change as common way of accessing --- addon/utils/merge-deep.ts | 4 +++- addon/utils/set-deep.ts | 12 ++++-------- tests/unit/utils/merge-deep-test.js | 9 +++++---- tests/unit/utils/set-deep-test.js | 7 +++++++ 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/addon/utils/merge-deep.ts b/addon/utils/merge-deep.ts index 0db95262..9bcba764 100644 --- a/addon/utils/merge-deep.ts +++ b/addon/utils/merge-deep.ts @@ -1,3 +1,5 @@ +import Change from '../-private/change'; + interface Options { safeGet: any safeSet: any @@ -98,7 +100,7 @@ function mergeTargetAndSource(target: any, source: any, options: Options): any { target[key] = mergeDeep(options.safeGet(target, key), options.safeGet(source, key), options); } else { let next = source[key]; - if (next && next.value) { + if (next && next instanceof Change) { return target[key] = next.value; } diff --git a/addon/utils/set-deep.ts b/addon/utils/set-deep.ts index bd871e83..cea40ad1 100644 --- a/addon/utils/set-deep.ts +++ b/addon/utils/set-deep.ts @@ -44,11 +44,7 @@ export default function setDeep(target: any, path: string, value: unknown): any // to avoid overwriting child keys of leaf node function result(target: any, path: string, value: unknown) { - if (isPlainObject(target[path]) && isPlainObject(value)) { - target[path] = { ...target[path], ...value }; - } else { - target[path] = value; - } + target[path] = value; } function split(path: string): string[] { @@ -65,6 +61,6 @@ function isObject(val: unknown) { return val !== null && (typeof val === 'object' || typeof val === 'function'); } -function isPlainObject(o: unknown): o is object { - return Object.prototype.toString.call(o) === '[object Object]'; -} +// function isPlainObject(o: unknown): o is object { +// return Object.prototype.toString.call(o) === '[object Object]'; +// } diff --git a/tests/unit/utils/merge-deep-test.js b/tests/unit/utils/merge-deep-test.js index ead0b832..36f98f82 100644 --- a/tests/unit/utils/merge-deep-test.js +++ b/tests/unit/utils/merge-deep-test.js @@ -1,11 +1,12 @@ import mergeDeep from 'ember-changeset/utils/merge-deep'; +import Change from 'ember-changeset/-private/change'; import { module, test } from 'qunit'; import { get, set } from '@ember/object'; module('Unit | Utility | merge deep', () => { test('it returns merged objects', async function(assert) { let objA = { other: 'Ivan' }; - let objB = { foo: { value: 'bar' }, zoo: 'doo' }; + let objB = { foo: new Change('bar'), zoo: 'doo' }; let value = mergeDeep(objA, objB); assert.deepEqual(value, { other: 'Ivan', foo: 'bar', zoo: 'doo' }, 'merges both values'); @@ -13,7 +14,7 @@ module('Unit | Utility | merge deep', () => { test('it unsets', async function(assert) { let objA = { other: 'Ivan' }; - let objB = { other: null }; + let objB = { other: new Change(null) }; let value = mergeDeep(objA, objB); assert.deepEqual(value, { other: null }, 'unsets value'); @@ -21,7 +22,7 @@ module('Unit | Utility | merge deep', () => { test('it works with Ember.get and Ember.set', async function(assert) { let objA = { other: 'Ivan' }; - let objB = { other: null }; + let objB = { other: new Change(null) }; let value = mergeDeep(objA, objB, { safeGet: get, safeSet: set }); assert.deepEqual(value, { other: null }, 'unsets value'); @@ -29,7 +30,7 @@ module('Unit | Utility | merge deep', () => { test('it works with deeper nested objects', async function(assert) { let objA = { company: { employees: ['Ivan', 'Jan'] } }; - let objB = { company: { employees: { value: ['Jull', 'Olafur'] } } }; + let objB = { company: { employees: new Change(['Jull', 'Olafur']) } }; let value = mergeDeep(objA, objB); assert.deepEqual(value, { company: { employees: ['Jull', 'Olafur']} }, 'has right employees'); diff --git a/tests/unit/utils/set-deep-test.js b/tests/unit/utils/set-deep-test.js index d57c8faf..525217e7 100644 --- a/tests/unit/utils/set-deep-test.js +++ b/tests/unit/utils/set-deep-test.js @@ -30,6 +30,13 @@ module('Unit | Utility | set deep', () => { assert.deepEqual(value, { name: { other: 'foo' }}, 'result has value'); }); + test('it handles sibling keys', async function(assert) { + let objA = { name: { other: 'Ivan', koala: 'bear' }, star: 'wars' }; + let value = setDeep(objA, 'name.other', 'foo'); + + assert.deepEqual(value, { name: { other: 'foo', koala: 'bear' }, star: 'wars' }, 'keeps sibling key'); + }); + test('it works with multiple values', async function(assert) { let objA = { name: { other: 'Ivan' }, foo: { other: 'bar' } }; let value = setDeep(objA, 'name', 'zoo'); From afdebd5352e955bd4cc70283e94310fd06c9c826 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 24 Nov 2019 10:08:15 -0700 Subject: [PATCH 66/75] remove ember-deep-set --- package.json | 4 +-- yarn.lock | 74 ++++++++++++---------------------------------------- 2 files changed, 18 insertions(+), 60 deletions(-) diff --git a/package.json b/package.json index a47be2f1..3b12f47a 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,7 @@ "dependencies": { "@glimmer/tracking": "^0.14.0-alpha.1", "ember-cli-babel": "^7.13.0", - "ember-cli-typescript": "2.0.2", - "ember-deep-set": "^0.2.0" + "ember-cli-typescript": "2.0.2" }, "devDependencies": { "@ember/optional-features": "^1.0.0", @@ -68,6 +67,7 @@ "eslint-plugin-ember": "^7.1.0", "eslint-plugin-node": "^10.0.0", "loader.js": "^4.7.0", + "prettier": "^1.19.1", "typescript": "^3.7.2" }, "engines": { diff --git a/yarn.lock b/yarn.lock index ccf3e621..7a1de903 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1452,11 +1452,6 @@ ansi-html@^0.0.7: resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= -ansi-regex@*, ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -4019,7 +4014,7 @@ debug@~3.1.0: dependencies: ms "2.0.0" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -4709,13 +4704,6 @@ ember-data@^3.8.0: semver "^5.6.0" silent-error "^1.1.1" -ember-deep-set@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ember-deep-set/-/ember-deep-set-0.2.0.tgz#93428b599f884c3da0550cbcc062b9ec5969a71e" - integrity sha512-3vg9Cw4CIInXzufZMQmScClg23mUw+2ybO53L51spFYP/eGaVmGduWmhrVljyl4lHKN7hW/jvG/YVWtwTPSTKA== - dependencies: - ember-cli-babel "^7.1.2" - ember-disable-prototype-extensions@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/ember-disable-prototype-extensions/-/ember-disable-prototype-extensions-1.1.3.tgz#1969135217654b5e278f9fe2d9d4e49b5720329e" @@ -6438,7 +6426,7 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -7226,7 +7214,7 @@ lodash._basefor@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI= -lodash._baseindexof@*, lodash._baseindexof@^3.0.0: +lodash._baseindexof@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= @@ -7240,14 +7228,6 @@ lodash._baseisequal@^3.0.0: lodash.istypedarray "^3.0.0" lodash.keys "^3.0.0" -lodash._baseuniq@*: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= - dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - lodash._baseuniq@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-3.0.3.tgz#2123fa0db2d69c28d5beb1c1f36d61522a740234" @@ -7257,12 +7237,12 @@ lodash._baseuniq@^3.0.0: lodash._cacheindexof "^3.0.0" lodash._createcache "^3.0.0" -lodash._bindcallback@*, lodash._bindcallback@^3.0.0: +lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= -lodash._cacheindexof@*, lodash._cacheindexof@^3.0.0: +lodash._cacheindexof@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= @@ -7276,19 +7256,14 @@ lodash._createassigner@^3.0.0: lodash._isiterateecall "^3.0.0" lodash.restparam "^3.0.0" -lodash._createcache@*, lodash._createcache@^3.0.0: +lodash._createcache@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= dependencies: lodash._getnative "^3.0.0" -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= - -lodash._getnative@*, lodash._getnative@^3.0.0: +lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= @@ -7303,11 +7278,6 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash._root@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= - lodash.assign@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" @@ -7370,16 +7340,11 @@ lodash.foreach@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= -lodash.isarguments@*, lodash.isarguments@^3.0.0: +lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= -lodash.isarray@*: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-4.0.0.tgz#2aca496b28c4ca6d726715313590c02e6ea34403" - integrity sha1-KspJayjEym1yZxUxNZDALm6jRAM= - lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" @@ -7390,11 +7355,6 @@ lodash.istypedarray@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" integrity sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I= -lodash.keys@*: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" - integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU= - lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -7436,7 +7396,7 @@ lodash.pairs@^3.0.0: dependencies: lodash.keys "^3.0.0" -lodash.restparam@*, lodash.restparam@^3.0.0: +lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= @@ -8867,6 +8827,11 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +prettier@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + pretty-ms@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-3.2.0.tgz#87a8feaf27fc18414d75441467d411d6e6098a25" @@ -9228,7 +9193,7 @@ readable-stream@~2.0.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -10320,13 +10285,6 @@ stringstream@~0.0.4: resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== -strip-ansi@*: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - 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" @@ -11017,7 +10975,7 @@ uuid@^3.3.2, uuid@^3.3.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== -validate-npm-package-license@*, validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== From 6224202d5e421472ad87c28b2acfebb47456372d Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 24 Nov 2019 10:12:54 -0700 Subject: [PATCH 67/75] Update README with v3.0 install --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eecfbddd..ec789fbc 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ ember install ember-changeset ## Updates -We have released `v2.0.0`. This includes a solution for deeply nested sets with one big caveat. Some history - Post v1.3.0, there was an elegant solution proposed and implemented for deeply nested sets - e.g. `changeset.set('profile.name', 'myname')`. However, this caused many issues and was reverted in v2.0.0-beta. Since `ember-changeset` relies on [Proxy](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy) like behaviour, we are able to trap `changeset.set(...` and properly handle nested sets. This, however, is a problem in templates where `mut changeset.profile.name` is implicitly `set(changeset, 'profile.name')`, thus subverting our trap. This is the caveat with the v2.0.0 release. Although it is an improvement over v1.3.0 and should be 1-1 behaviour if you are setting at a single level - e.g. `mut changeset.name` -, nested setters don't have an ideal solution. So we are releasing v2.0.0 with this caveat and adding a `changeset-set` template helper. This is a work in progress. +We have released `v3.0.0`. This requires Ember >= 3.13 as the use of `@tracked` will help us monitor and propagate changes to the UI layer. If your app is < 3.13, the you can install the 2.0 series `ember install ember-changeset@v2.2.4`. ## Philosophy From 4301bb42c070658b28acb308d96e4e1f3910de0a Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 24 Nov 2019 13:31:38 -0700 Subject: [PATCH 68/75] notifier cleanup --- addon/-private/notifier.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/addon/-private/notifier.ts b/addon/-private/notifier.ts index baebad35..2ce7f7d6 100644 --- a/addon/-private/notifier.ts +++ b/addon/-private/notifier.ts @@ -13,8 +13,6 @@ export default class Notifier{ } removeListener(callback: (...args: T) => void) { - this.listeners; - for (let i = 0; i < this.listeners.length; i++) { if (this.listeners[i] === callback) { this.listeners.splice(i, 1); From 2f8267d8150ecfa25e2e88a2308e588c2510f4ad Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 24 Nov 2019 13:36:10 -0700 Subject: [PATCH 69/75] clarifications on using Ember.set --- README.md | 8 ++++---- addon/utils/is-changeset.ts | 4 +--- tests/integration/main-test.js | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ec789fbc..1657773a 100644 --- a/README.md +++ b/README.md @@ -443,8 +443,8 @@ get(changeset, 'momentObj.content').format('dddd'); // => "Friday" Exactly the same semantics as `Ember.set`. This stores the change on the changeset. ```js -set(changeset, 'firstName', 'Milton'); // "Milton" -set(changeset, 'address.zipCode', '10001'); // "10001" +changeset.set('firstName', 'Milton'); // "Milton" +changeset.set('address.zipCode', '10001'); // "10001" ``` You can use and bind this property in the template: @@ -879,7 +879,7 @@ export default Component.extend({ let snapshot = changeset.snapshot(); // valuePath is the property on the changeset, e.g. firstName - set(changeset, valuePath, value); + changeset.set(valuePath, value); if (!changeset.get(`error.${valuePath}`)) { set(this, 'hasError', false); @@ -898,7 +898,7 @@ export default Component.extend({ * @param {Object} e */ validateProperty(changeset, valuePath, e) { - set(changeset, valuePath, e.target.value); + changeset.set(valuePath, e.target.value); if (changeset.get(`error.${valuePath}`)) { set(this, 'hasError', true); diff --git a/addon/utils/is-changeset.ts b/addon/utils/is-changeset.ts index 03cae7dd..76cc0f13 100644 --- a/addon/utils/is-changeset.ts +++ b/addon/utils/is-changeset.ts @@ -1,7 +1,5 @@ -import { get } from '@ember/object'; - export const CHANGESET = '__CHANGESET__'; export default function isChangeset(changeset: any): boolean { - return get(changeset, '__changeset__') === CHANGESET; + return changeset.get('__changeset__') === CHANGESET; } diff --git a/tests/integration/main-test.js b/tests/integration/main-test.js index 65308d8f..06f32326 100644 --- a/tests/integration/main-test.js +++ b/tests/integration/main-test.js @@ -34,7 +34,7 @@ module('Integration | main', function(hooks) { assert.equal(changeset.get('profile.firstName'), 'Grace', 'has firstName after set'); assert.equal(changeset.get('profile.nickname'), 'g', 'has nickname after set'); - assert.equal(changeset.get('profile.lastName'), 'Ross', 'has last name after test'); + assert.equal(changeset.get('profile.lastName'), 'Ross', 'Ember.set does not change anything'); changeset.execute(); From f4ed5aca0ff3ecdde273a813fad160d0987a1b49 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 24 Nov 2019 14:08:17 -0700 Subject: [PATCH 70/75] clarify #set with nested keys --- README.md | 2 +- addon/-private/validated-changeset.ts | 1 + addon/utils/is-changeset.ts | 2 +- tests/unit/changeset-test.js | 33 +++++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1657773a..018c3348 100644 --- a/README.md +++ b/README.md @@ -440,7 +440,7 @@ get(changeset, 'momentObj.content').format('dddd'); // => "Friday" #### `set` -Exactly the same semantics as `Ember.set`. This stores the change on the changeset. +Exactly the same semantics as `Ember.set`. This stores the change on the changeset. It is recommended to use `changeset.set(...)` instead of `Ember.set(changeset, ...)`. `Ember.set` will set the property for nested keys on the underlying model. ```js changeset.set('firstName', 'Milton'); // "Milton" diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index e83117eb..3396dd2d 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -201,6 +201,7 @@ export class BufferedChangeset implements IChangeset { /** * Stores change on the changeset. + * This approximately works just like the Ember API * * @method setUnknownProperty */ diff --git a/addon/utils/is-changeset.ts b/addon/utils/is-changeset.ts index 76cc0f13..053294ea 100644 --- a/addon/utils/is-changeset.ts +++ b/addon/utils/is-changeset.ts @@ -1,5 +1,5 @@ export const CHANGESET = '__CHANGESET__'; export default function isChangeset(changeset: any): boolean { - return changeset.get('__changeset__') === CHANGESET; + return changeset['__changeset__'] === CHANGESET; } diff --git a/tests/unit/changeset-test.js b/tests/unit/changeset-test.js index 6b4de2ec..0b287255 100644 --- a/tests/unit/changeset-test.js +++ b/tests/unit/changeset-test.js @@ -357,6 +357,39 @@ module('Unit | Utility | changeset', function(hooks) { assert.deepEqual(changes, expectedChanges, 'should add change'); }); + test('#set Ember.set works', async function(assert) { + let expectedChanges = [{ key: 'name', value: 'foo' }]; + let dummyChangeset = new Changeset(dummyModel); + set(dummyChangeset, 'name', 'foo'); + + assert.equal(dummyModel.name, undefined, 'should keep change'); + assert.equal(dummyChangeset.get('name'), 'foo', 'should have new change'); + + let changes = get(dummyChangeset, 'changes'); + assert.deepEqual(changes, expectedChanges, 'should add change'); + + dummyChangeset.execute(); + + assert.equal(dummyModel.name, 'foo', 'should be applied'); + assert.equal(dummyChangeset.get('name'), 'foo', 'should have new change'); + }); + + test('#set Ember.set doesnt work for nested', async function(assert) { + set(dummyModel, 'name', {}); + let dummyChangeset = new Changeset(dummyModel); + set(dummyChangeset, 'name.short', 'foo'); + + assert.equal(dummyChangeset.get('name.short'), 'foo', 'should have new change'); + assert.deepEqual(dummyModel.name.short, 'foo', 'has property on moel already before execute'); + + let changes = get(dummyChangeset, 'changes'); + assert.deepEqual(changes, [], 'no changes with nested key Ember.set'); + + dummyChangeset.execute(); + + assert.equal(dummyModel.name.short, 'foo', 'still has property'); + }); + test('#set adds a change if the key is an object', async function(assert) { set(dummyModel, 'org', { usa: { From 9760ff15a6706c8adf7f244b9389a0d2ea7dd409 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Mon, 25 Nov 2019 06:54:34 -0700 Subject: [PATCH 71/75] add another helpful dev assert --- addon/-private/validated-changeset.ts | 2 +- addon/index.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 3396dd2d..89dc2c81 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -52,7 +52,7 @@ const defaultOptions = { skipValidate: false }; export class BufferedChangeset implements IChangeset { constructor( - obj: any, + obj: object, public validateFn: ValidatorAction = defaultValidatorFn, public validationMap: ValidatorMap = {}, options: Config = {} diff --git a/addon/index.ts b/addon/index.ts index 6079976d..b596f199 100644 --- a/addon/index.ts +++ b/addon/index.ts @@ -145,6 +145,7 @@ export function changeset( options: Config = {} ) { assert('Underlying object for changeset is missing', Boolean(obj)); + assert('Array is not a valid type to pass as the first argument to `changeset`', !Array.isArray(obj)); const c = new EmberChangeset(obj, validateFn, validationMap, options); From 8cf6f2d4bae76f8df243e4fe4a625873ddeab794 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Mon, 25 Nov 2019 14:54:59 -0700 Subject: [PATCH 72/75] remove deepSet type --- types/ember-deep-set/index.d.ts | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 types/ember-deep-set/index.d.ts diff --git a/types/ember-deep-set/index.d.ts b/types/ember-deep-set/index.d.ts deleted file mode 100644 index 1cef6b13..00000000 --- a/types/ember-deep-set/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default function deepSet( - obj: T, - key: String, - value: any -): T; From 54c6ba810f1224c0a59fc71d6055f8100d34769b Mon Sep 17 00:00:00 2001 From: snewcomer Date: Tue, 26 Nov 2019 07:45:21 -0700 Subject: [PATCH 73/75] add tests for native setter --- tests/unit/changeset-test.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/unit/changeset-test.js b/tests/unit/changeset-test.js index 0b287255..8d97667d 100644 --- a/tests/unit/changeset-test.js +++ b/tests/unit/changeset-test.js @@ -409,6 +409,36 @@ module('Unit | Utility | changeset', function(hooks) { assert.deepEqual(changes, expectedChanges, 'should add change'); }); + test('#set use native setters with nested doesnt work', async function(assert) { + set(dummyModel, 'org', { + usa: { + ny: 'ny', + } + }); + + let c = new Changeset(dummyModel); + c.org.usa.ny = 'foo'; + + assert.equal(dummyModel.org.usa.ny, 'foo', 'change applied to model'); + assert.equal(c.get('org.usa.ny'), 'foo', 'should have new change'); + + let changes = get(c, 'changes'); + assert.deepEqual(changes, [], 'no changes'); + }); + + test('#set use native setters at single level', async function(assert) { + dummyModel.org = 'ny'; + + let c = new Changeset(dummyModel); + c.org = 'foo'; + + assert.equal(dummyModel.org, 'ny', 'should keep change'); + assert.equal(c.org, 'foo', 'should have new change'); + + let changes = get(c, 'changes'); + assert.deepEqual(changes, [{ key: 'org', value: 'foo' }], 'should add change'); + }); + test('#set adds a change if value is an object', async function(assert) { class Moment { constructor(date) { From ab6297209038f783be1e52f03fccb1392c65d748 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Tue, 26 Nov 2019 22:44:27 -0700 Subject: [PATCH 74/75] ensure can call nested with error and change --- addon/-private/validated-changeset.ts | 38 +++++++++++++++++---------- package.json | 2 +- tests/unit/changeset-test.js | 4 +++ 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/addon/-private/validated-changeset.ts b/addon/-private/validated-changeset.ts index 89dc2c81..9f7a84f4 100644 --- a/addon/-private/validated-changeset.ts +++ b/addon/-private/validated-changeset.ts @@ -844,31 +844,41 @@ export class BufferedChangeset implements IChangeset { get(key: string): any { // 'person' - if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [key])) { + // 'person.username' + let [baseKey, ...remaining] = key.split('.'); + + if (Object.prototype.hasOwnProperty.call(this[CHANGES], baseKey)) { let changes: Changes = this[CHANGES]; - let result = changes[key]; - if (isObject(result)) { - return normalizeObject(result); + let result; + + if (remaining.length > 0) { + let c = changes[baseKey]; + result = this.getDeep(normalizeObject(c), remaining.join('.')); + if (result) { + return result; + } + } else { + result = changes[baseKey]; } - return result.value; - } + if (result && isObject(result)) { + return normalizeObject(result); + } - // 'person.username' - let [baseKey, ...remaining] = key.split('.'); - if (Object.prototype.hasOwnProperty.apply(this[CHANGES], [baseKey])) { - let changes: Changes = this[CHANGES]; - let c = changes[baseKey]; - let result = this.getDeep(normalizeObject(c), remaining.join('.')); - // just b/c top level key exists doesn't mean it has the nested key we are looking for if (result) { - return result; + return result.value; } } // return getters/setters/methods on BufferedProxy instance if (this[key]) { return this[key]; + } else if (this[baseKey]) { + const v: unknown = this[baseKey]; + if (isObject(v)) { + const result = this.getDeep(v as Record, remaining.join('.')); + return result; + } } // finally return on underlying object diff --git a/package.json b/package.json index 3b12f47a..dd4c6389 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "changeset" ], "license": "MIT", - "author": "Lauren Tan ", + "author": "", "directories": { "doc": "doc", "test": "tests" diff --git a/tests/unit/changeset-test.js b/tests/unit/changeset-test.js index 8d97667d..353aaf99 100644 --- a/tests/unit/changeset-test.js +++ b/tests/unit/changeset-test.js @@ -82,7 +82,11 @@ module('Unit | Utility | changeset', function(hooks) { dummyChangeset.set('name', 'a'); assert.deepEqual(dummyChangeset.error, expectedResult, 'should return error object'); + assert.deepEqual(dummyChangeset.get('error').name, expectedResult.name, 'should return nested error'); + assert.deepEqual(dummyChangeset.get('error.name'), expectedResult.name, 'should return nested error'); assert.deepEqual(dummyChangeset.change, { name: 'a' }, 'should return change object'); + assert.deepEqual(dummyChangeset.get('change.name'), 'a', 'should return nested change'); + assert.deepEqual(dummyChangeset.get('change').name, 'a', 'should return nested change'); }); /** From 472576f6d8412a2f4ff1cd143313ade91c9e37e3 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Tue, 26 Nov 2019 22:49:00 -0700 Subject: [PATCH 75/75] add contributors --- package.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index dd4c6389..88016b57 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,13 @@ "changeset" ], "license": "MIT", - "author": "", + "author": "Lauren Tan ", + "contributors": [ + { + "name": "Scott Newcomer", + "url": "https://github.com/snewcomer" + } + ], "directories": { "doc": "doc", "test": "tests"