diff --git a/.eslintrc.js b/.eslintrc.js index 2000b35..ef236c6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -5,16 +5,19 @@ module.exports = { sourceType: 'module' }, plugins: [ - 'ember' + 'ember', + 'prettier', ], extends: [ 'eslint:recommended', - 'plugin:ember/recommended' + 'plugin:ember/recommended', + 'prettier', ], env: { browser: true }, rules: { + 'prettier/prettier': 'error', }, overrides: [ // node files diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..0040047 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "trailingComma": "es5", + "printWidth": 100 + } \ No newline at end of file diff --git a/config/ember-try.js b/config/ember-try.js index fb22311..82054c7 100644 --- a/config/ember-try.js +++ b/config/ember-try.js @@ -6,8 +6,8 @@ module.exports = function() { return Promise.all([ getChannelURL('release'), getChannelURL('beta'), - getChannelURL('canary') - ]).then((urls) => { + getChannelURL('canary'), + ]).then(urls => { return { useYarn: true, scenarios: [ @@ -15,57 +15,57 @@ module.exports = function() { name: 'ember-lts-2.12', npm: { devDependencies: { - 'ember-source': '~2.12.0' - } - } + 'ember-source': '~2.12.0', + }, + }, }, { name: 'ember-lts-2.16', npm: { devDependencies: { - 'ember-source': '~2.16.0' - } - } + 'ember-source': '~2.16.0', + }, + }, }, { name: 'ember-lts-2.18', npm: { devDependencies: { - 'ember-source': '~2.18.0' - } - } + 'ember-source': '~2.18.0', + }, + }, }, { name: 'ember-release', npm: { devDependencies: { - 'ember-source': urls[0] - } - } + 'ember-source': urls[0], + }, + }, }, { name: 'ember-beta', npm: { devDependencies: { - 'ember-source': urls[1] - } - } + 'ember-source': urls[1], + }, + }, }, { name: 'ember-canary', npm: { devDependencies: { - 'ember-source': urls[2] - } - } + 'ember-source': urls[2], + }, + }, }, { name: 'ember-default', npm: { - devDependencies: {} - } - } - ] + devDependencies: {}, + }, + }, + ], }; }); }; diff --git a/config/environment.js b/config/environment.js index 0dfaed4..9707ea6 100644 --- a/config/environment.js +++ b/config/environment.js @@ -1,5 +1,5 @@ 'use strict'; module.exports = function(/* environment, appConfig */) { - return { }; + return {}; }; diff --git a/index.js b/index.js index ec8a623..82c6a3c 100644 --- a/index.js +++ b/index.js @@ -21,7 +21,7 @@ module.exports = { plugin: require('./lib/angle-bracket-invocation-polyfill'), baseDir() { return __dirname; - } + }, }); } }, @@ -29,20 +29,24 @@ module.exports = { included() { this._super.included.apply(this, arguments); - if (!this.shouldPolyfill) { return; } + if (!this.shouldPolyfill) { + return; + } - this.import("vendor/angle-bracket-invocation-polyfill/index.js"); + this.import('vendor/angle-bracket-invocation-polyfill/index.js'); }, treeForVendor(rawVendorTree) { - if (!this.shouldPolyfill) { return; } + if (!this.shouldPolyfill) { + return; + } - let babelAddon = this.addons.find(addon => addon.name === "ember-cli-babel"); + let babelAddon = this.addons.find(addon => addon.name === 'ember-cli-babel'); let transpiledVendorTree = babelAddon.transpileTree(rawVendorTree, { - "ember-cli-babel": { - compileModules: false - } + 'ember-cli-babel': { + compileModules: false, + }, }); return transpiledVendorTree; diff --git a/lib/angle-bracket-invocation-polyfill.js b/lib/angle-bracket-invocation-polyfill.js index a249aa2..18b5d31 100644 --- a/lib/angle-bracket-invocation-polyfill.js +++ b/lib/angle-bracket-invocation-polyfill.js @@ -1,4 +1,4 @@ -"use strict"; +'use strict'; const reLines = /(.*?(?:\r\n?|\n|$))/gm; const ALPHA = /[A-Za-z]/; @@ -17,7 +17,7 @@ class AngleBracketPolyfill { // in order to debug in https://astexplorer.net/#/gist/5e923e7322de5052a26a5a292f8c3995/ // **** copy from here **** function dasherize(string) { - return string.replace(/[A-Z]/g, function (char, index) { + return string.replace(/[A-Z]/g, function(char, index) { return (index !== 0 ? '-' : '') + char.toLowerCase(); }); } @@ -43,38 +43,42 @@ class AngleBracketPolyfill { // politely lifted from https://github.com/glimmerjs/glimmer-vm/blob/v0.35.0/packages/%40glimmer/syntax/lib/parser.ts#L113-L149 function sourceForNode(node) { - let firstLine = node.loc.start.line - 1; - let currentLine = firstLine - 1; - let firstColumn = node.loc.start.column; - let string = []; - let line; - - let lastLine = node.loc.end.line - 1; - let lastColumn = node.loc.end.column; - - while (currentLine < lastLine) { - currentLine++; - line = sourceLines[currentLine]; - - if (currentLine === firstLine) { - if (firstLine === lastLine) { - string.push(line.slice(firstColumn, lastColumn)); - } else { - string.push(line.slice(firstColumn)); - } - } else if (currentLine === lastLine) { - string.push(line.slice(0, lastColumn)); + let firstLine = node.loc.start.line - 1; + let currentLine = firstLine - 1; + let firstColumn = node.loc.start.column; + let string = []; + let line; + + let lastLine = node.loc.end.line - 1; + let lastColumn = node.loc.end.column; + + while (currentLine < lastLine) { + currentLine++; + line = sourceLines[currentLine]; + + if (currentLine === firstLine) { + if (firstLine === lastLine) { + string.push(line.slice(firstColumn, lastColumn)); } else { - string.push(line); + string.push(line.slice(firstColumn)); } + } else if (currentLine === lastLine) { + string.push(line.slice(0, lastColumn)); + } else { + string.push(line); } + } - return string.join('\n'); + return string.join('\n'); } function getSelfClosing(element) { - if ('selfClosing' in element) { return element.selfClosing; } - if (!hasSourceAvailable) { return false; } + if ('selfClosing' in element) { + return element.selfClosing; + } + if (!hasSourceAvailable) { + return false; + } let nodeSource = sourceForNode(element); let firstClosingBracketIndex = nodeSource.indexOf('>'); @@ -91,7 +95,9 @@ class AngleBracketPolyfill { */ function getTag(element) { // if we have no source, we must use whatever element.tag has - if (!hasSourceAvailable) { return element.tag; } + if (!hasSourceAvailable) { + return element.tag; + } let nodeSource = sourceForNode(element); @@ -99,8 +105,8 @@ class AngleBracketPolyfill { for (let i = 0; i < nodeSource.length; i++) { let char = nodeSource[i]; if (char == '@' || ALPHA.test(char)) { - firstChar = char; - break; + firstChar = char; + break; } } @@ -115,21 +121,23 @@ class AngleBracketPolyfill { let [maybeLocal] = tag.split('.'); let isLocal = locals.indexOf(maybeLocal) !== -1; - let isUpperCase = invocationFirstChar === invocationFirstChar.toUpperCase() && invocationFirstChar !== invocationFirstChar.toLowerCase(); + let isUpperCase = + invocationFirstChar === invocationFirstChar.toUpperCase() && + invocationFirstChar !== invocationFirstChar.toLowerCase(); let selfClosing = getSelfClosing(element); if (isLocal || isNamedArgument || isThisPath) { return { kind: 'DynamicComponent', path: b.path(tag), - selfClosing - } + selfClosing, + }; } else if (isUpperCase) { return { kind: 'StaticComponent', componentName: dasherize(tag), selfClosing, - } + }; } else { return { kind: 'Element' }; } @@ -146,26 +154,26 @@ class AngleBracketPolyfill { for (let i = 0; i < node.blockParams.length; i++) { locals.pop(); } - } + }, }, ElementNode(node) { let invocation = getInvocationDetails(node); - if (invocation.kind === 'Element') { return; } + if (invocation.kind === 'Element') { + return; + } let { children, blockParams } = node; let attributes = node.attributes.filter(node => node.name[0] !== '@'); let args = node.attributes.filter(node => node.name[0] === '@'); - let hash = b.hash(args.map(arg => - b.pair( - arg.name.slice(1), - expressionForAttributeValue(arg.value), - arg.loc + let hash = b.hash( + args.map(arg => + b.pair(arg.name.slice(1), expressionForAttributeValue(arg.value), arg.loc) ) - )); + ); if (attributes.length > 0) { hash.pairs.push( @@ -174,9 +182,11 @@ class AngleBracketPolyfill { b.sexpr( 'hash', [], - b.hash(attributes.map(attr => - b.pair(attr.name, expressionForAttributeValue(attr.value), attr.loc) - )) + b.hash( + attributes.map(attr => + b.pair(attr.name, expressionForAttributeValue(attr.value), attr.loc) + ) + ) ) ) ); @@ -186,17 +196,18 @@ class AngleBracketPolyfill { if (invocation.selfClosing === true) { return b.mustache(invocation.componentName, null, hash, false, node.loc); } else { - return b.block(invocation.componentName, null, hash, b.program(children, blockParams), null, node.loc); - } - } else { - if (invocation.selfClosing === true) { - return b.mustache( - 'component', - [invocation.path], + return b.block( + invocation.componentName, + null, hash, + b.program(children, blockParams), null, node.loc ); + } + } else { + if (invocation.selfClosing === true) { + return b.mustache('component', [invocation.path], hash, null, node.loc); } else { return b.block( 'component', diff --git a/lib/sample-compile-script.js b/lib/sample-compile-script.js index 3b59cb5..835bd0c 100644 --- a/lib/sample-compile-script.js +++ b/lib/sample-compile-script.js @@ -13,4 +13,4 @@ compiler.registerPlugin('ast', require('./angle-bracket-invocation-polyfill')); let template = ''; let output = compiler.precompile(template, { contents: template }); -console.log(output); // eslint-disable-line no-console \ No newline at end of file +console.log(output); // eslint-disable-line no-console diff --git a/package.json b/package.json index 4d70214..58301f9 100644 --- a/package.json +++ b/package.json @@ -44,9 +44,12 @@ "ember-source": "~3.2.0-beta.2", "ember-source-channel-url": "^1.0.1", "ember-try": "^0.2.23", + "eslint-config-prettier": "^2.9.0", "eslint-plugin-ember": "^5.0.0", "eslint-plugin-node": "^6.0.1", + "eslint-plugin-prettier": "^2.6.0", "loader.js": "^4.2.3", + "prettier": "^1.13.4", "qunit-dom": "^0.6.2" }, "engines": { diff --git a/testem.js b/testem.js index d1755a4..234f37b 100644 --- a/testem.js +++ b/testem.js @@ -1,12 +1,8 @@ module.exports = { test_page: 'tests/index.html?hidepassed', disable_watching: true, - launch_in_ci: [ - 'Chrome' - ], - launch_in_dev: [ - 'Chrome' - ], + launch_in_ci: ['Chrome'], + launch_in_dev: ['Chrome'], browser_args: { Chrome: { mode: 'ci', @@ -17,8 +13,8 @@ module.exports = { '--disable-gpu', '--headless', '--remote-debugging-port=0', - '--window-size=1440,900' - ].filter(Boolean) - } - } + '--window-size=1440,900', + ].filter(Boolean), + }, + }, }; diff --git a/tests/dummy/app/app.js b/tests/dummy/app/app.js index b3b2bd6..f08aaaf 100644 --- a/tests/dummy/app/app.js +++ b/tests/dummy/app/app.js @@ -6,7 +6,7 @@ import config from './config/environment'; const App = Application.extend({ modulePrefix: config.modulePrefix, podModulePrefix: config.podModulePrefix, - Resolver + Resolver, }); loadInitializers(App, config.modulePrefix); diff --git a/tests/dummy/app/router.js b/tests/dummy/app/router.js index d0bb009..8f6f459 100644 --- a/tests/dummy/app/router.js +++ b/tests/dummy/app/router.js @@ -3,10 +3,9 @@ import config from './config/environment'; const Router = EmberRouter.extend({ location: config.locationType, - rootURL: config.rootURL + rootURL: config.rootURL, }); -Router.map(function() { -}); +Router.map(function() {}); export default Router; diff --git a/tests/dummy/config/environment.js b/tests/dummy/config/environment.js index 182d3fc..d831480 100644 --- a/tests/dummy/config/environment.js +++ b/tests/dummy/config/environment.js @@ -13,14 +13,14 @@ module.exports = function(environment) { }, EXTEND_PROTOTYPES: { // Prevent Ember Data from overriding Date.parse. - Date: false - } + Date: false, + }, }, APP: { // Here you can pass flags/options to your application instance // when it is created - } + }, }; if (environment === 'development') { diff --git a/tests/dummy/config/targets.js b/tests/dummy/config/targets.js index 8ffae36..f143193 100644 --- a/tests/dummy/config/targets.js +++ b/tests/dummy/config/targets.js @@ -1,10 +1,6 @@ 'use strict'; -const browsers = [ - 'last 1 Chrome versions', - 'last 1 Firefox versions', - 'last 1 Safari versions' -]; +const browsers = ['last 1 Chrome versions', 'last 1 Firefox versions', 'last 1 Safari versions']; const isCI = !!process.env.CI; const isProduction = process.env.EMBER_ENV === 'production'; @@ -14,5 +10,5 @@ if (isCI || isProduction) { } module.exports = { - browsers + browsers, }; diff --git a/tests/integration/components/angle-bracket-invocation-test.js b/tests/integration/components/angle-bracket-invocation-test.js index 9bfafb8..cd0d282 100644 --- a/tests/integration/components/angle-bracket-invocation-test.js +++ b/tests/integration/components/angle-bracket-invocation-test.js @@ -6,11 +6,11 @@ import hbs from 'htmlbars-inline-precompile'; import Service, { inject as injectService } from '@ember/service'; import Component from '@ember/component'; -module('Integration | Component | angle-bracket-invocation', function (hooks) { +module('Integration | Component | angle-bracket-invocation', function(hooks) { setupRenderingTest(hooks); - module('static component support', function () { - test('invoke without block', async function (assert) { + module('static component support', function() { + test('invoke without block', async function(assert) { this.owner.register('template:components/foo-bar', hbs`hi martin!`); await render(hbs``); @@ -18,7 +18,7 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { assert.dom().hasText('hi martin!'); }); - test('invoke with block', async function (assert) { + test('invoke with block', async function(assert) { this.owner.register('template:components/foo-bar', hbs`{{yield}}`); await render(hbs`hi rwjblue!`); @@ -26,7 +26,7 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { assert.dom().hasText('hi rwjblue!'); }); - test('yielding block param', async function (assert) { + test('yielding block param', async function(assert) { this.owner.register('template:components/foo-bar', hbs`{{yield 'hi'}}`); await render(hbs`{{salutation}} rwjblue!`); @@ -34,7 +34,7 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { assert.dom().hasText('hi rwjblue!'); }); - test('with arguments', async function (assert) { + test('with arguments', async function(assert) { this.owner.register('template:components/foo-bar', hbs`

{{title}}

`); this.set('title', "rwjblue's component"); @@ -70,7 +70,7 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { }); module('dynamic component support', function() { - test('invoke dynamic - local, self-closing', async function (assert) { + test('invoke dynamic - local, self-closing', async function(assert) { this.owner.register('template:components/foo-bar', hbs`hi rwjblue!`); await render(hbs` @@ -79,10 +79,10 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { {{/with}} `); - assert.dom().hasText("hi rwjblue!"); + assert.dom().hasText('hi rwjblue!'); }); - test('invoke dynamic - local path', async function (assert) { + test('invoke dynamic - local path', async function(assert) { this.owner.register('template:components/foo-bar', hbs`hi rwjblue!`); await render(hbs` @@ -91,10 +91,10 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { {{/with}} `); - assert.dom().hasText("hi rwjblue!"); + assert.dom().hasText('hi rwjblue!'); }); - test('invoke dynamic - local, block', async function (assert) { + test('invoke dynamic - local, block', async function(assert) { this.owner.register('template:components/foo-bar', hbs`{{yield}}!`); await render(hbs` @@ -103,10 +103,10 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { {{/with}} `); - assert.dom().hasText("hi rwjblue!"); + assert.dom().hasText('hi rwjblue!'); }); - test('invoke dynamic - local, block, block param', async function (assert) { + test('invoke dynamic - local, block, block param', async function(assert) { this.owner.register('template:components/foo-bar', hbs`{{yield 'hi'}}!`); await render(hbs` @@ -115,7 +115,7 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { {{/with}} `); - assert.dom().hasText("hi rwjblue!"); + assert.dom().hasText('hi rwjblue!'); }); test('local with single attribute', async function(assert) { @@ -130,66 +130,72 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { assert.dom('[data-foo="bar"]').exists(); }); - test('invoke dynamic - path', async function (assert) { + test('invoke dynamic - path', async function(assert) { this.owner.register('service:elsewhere', Service.extend()); - this.owner.register('component:x-invoker', Component.extend({ - elsewhere: injectService(), - - init() { - this._super(...arguments); - - let elsewhere = this.get('elsewhere'); - elsewhere.set('curriedThing', this.curriedThing); - } - })); + this.owner.register( + 'component:x-invoker', + Component.extend({ + elsewhere: injectService(), + + init() { + this._super(...arguments); + + let elsewhere = this.get('elsewhere'); + elsewhere.set('curriedThing', this.curriedThing); + }, + }) + ); this.owner.register('template:components/x-invoker', hbs``); this.owner.register('template:components/foo-bar', hbs`hi rwjblue!`); await render(hbs`{{x-invoker curriedThing=(component 'foo-bar')}}`); - assert.dom().hasText("hi rwjblue!"); + assert.dom().hasText('hi rwjblue!'); }); - test('invoke dynamic - path no implicit this', async function (assert) { + test('invoke dynamic - path no implicit this', async function(assert) { this.owner.register('service:elsewhere', Service.extend()); - this.owner.register('component:x-invoker', Component.extend({ - elsewhere: injectService(), - - init() { - this._super(...arguments); - - let elsewhere = this.get('elsewhere'); - elsewhere.set('curriedThing', this.curriedThing); - } - })); + this.owner.register( + 'component:x-invoker', + Component.extend({ + elsewhere: injectService(), + + init() { + this._super(...arguments); + + let elsewhere = this.get('elsewhere'); + elsewhere.set('curriedThing', this.curriedThing); + }, + }) + ); this.owner.register('template:components/x-invoker', hbs``); this.owner.register('template:components/foo-bar', hbs`hi rwjblue!`); await render(hbs`{{x-invoker curriedThing=(component 'foo-bar')}}`); // should not have rendered anything (no implicit `this`) - assert.dom().hasText(""); + assert.dom().hasText(''); }); }); - module('has-block', function (hooks) { - hooks.beforeEach(function () { + module('has-block', function(hooks) { + hooks.beforeEach(function() { this.owner.register('template:components/foo-bar', hbs`{{#if hasBlock}}Yes{{else}}No{{/if}}`); }); - test('when self-closing', async function (assert) { + test('when self-closing', async function(assert) { await render(hbs``); assert.dom().hasText('No'); }); - test('with block', async function (assert) { + test('with block', async function(assert) { await render(hbs`Stuff`); assert.dom().hasText('Yes'); }); - test('invoking dynamically - self-closing', async function (assert) { + test('invoking dynamically - self-closing', async function(assert) { await render(hbs` {{#with (component 'foo-bar') as |LolBar|}} @@ -199,7 +205,7 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { assert.dom().hasText('No'); }); - test('invoking dynamically - with block', async function (assert) { + test('invoking dynamically - with block', async function(assert) { await render(hbs` {{#with (component 'foo-bar') as |LolBar|}} @@ -209,4 +215,4 @@ module('Integration | Component | angle-bracket-invocation', function (hooks) { assert.dom().hasText('Yes'); }); }); -}); \ No newline at end of file +}); diff --git a/vendor/angle-bracket-invocation-polyfill/index.js b/vendor/angle-bracket-invocation-polyfill/index.js index 9584e3d..7696f8c 100644 --- a/vendor/angle-bracket-invocation-polyfill/index.js +++ b/vendor/angle-bracket-invocation-polyfill/index.js @@ -3,36 +3,36 @@ // Based heavily on https://github.com/mmun/ember-component-attributes (function() { - const { Component, computed } = Ember; + const { Component, computed } = Ember; - Component.reopen({ - __ANGLE_ATTRS__: computed({ - set(key, value) { - let attributes = Object.keys(value); - let attributeBindingsOverride = []; + Component.reopen({ + __ANGLE_ATTRS__: computed({ + set(key, value) { + let attributes = Object.keys(value); + let attributeBindingsOverride = []; - for (let i = 0; i < attributes.length; i++) { - let attribute = attributes[i]; + for (let i = 0; i < attributes.length; i++) { + let attribute = attributes[i]; - attributeBindingsOverride.push(`__ANGLE_ATTRS__.${attribute}:${attribute}`); - } - - if (this.attributeBindings) { - let attributeBindings = this.attributeBindings.filter(microsyntax => { - // See https://github.com/emberjs/ember.js/blob/6a6f279df3b1a0979b5fd000bf49cd775c720f01/packages/ember-glimmer/lib/utils/bindings.js#L59-L73 - let colonIndex = microsyntax.indexOf(":"); - let attribute = colonIndex === -1 ? microsyntax : microsyntax.substring(colonIndex + 1); + attributeBindingsOverride.push(`__ANGLE_ATTRS__.${attribute}:${attribute}`); + } - return attributes.indexOf(attribute) === -1; - }); + if (this.attributeBindings) { + let attributeBindings = this.attributeBindings.filter(microsyntax => { + // See https://github.com/emberjs/ember.js/blob/6a6f279df3b1a0979b5fd000bf49cd775c720f01/packages/ember-glimmer/lib/utils/bindings.js#L59-L73 + let colonIndex = microsyntax.indexOf(':'); + let attribute = colonIndex === -1 ? microsyntax : microsyntax.substring(colonIndex + 1); - this.attributeBindings = attributeBindingsOverride.concat(attributeBindings); - } else { - this.attributeBindings = attributeBindingsOverride; - } + return attributes.indexOf(attribute) === -1; + }); - return value; + this.attributeBindings = attributeBindingsOverride.concat(attributeBindings); + } else { + this.attributeBindings = attributeBindingsOverride; } - }) - }); - })(); \ No newline at end of file + + return value; + }, + }), + }); +})(); diff --git a/yarn.lock b/yarn.lock index 5dd4bf2..3583f9c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2306,6 +2306,12 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" +eslint-config-prettier@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" + dependencies: + get-stdin "^5.0.1" + eslint-plugin-ember@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-5.2.0.tgz#fa436e0497dfc01d1d38608229cd616e7c5b6067" @@ -2322,6 +2328,13 @@ eslint-plugin-node@^6.0.1: resolve "^1.3.3" semver "^5.4.1" +eslint-plugin-prettier@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" + dependencies: + fast-diff "^1.1.1" + jest-docblock "^21.0.0" + eslint-scope@^3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" @@ -2594,6 +2607,10 @@ 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" +fast-diff@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -2885,6 +2902,10 @@ get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -3534,6 +3555,10 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +jest-docblock@^21.0.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + jquery@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" @@ -4749,6 +4774,10 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +prettier@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.4.tgz#31bbae6990f13b1093187c731766a14036fa72e6" + printf@^0.2.3: version "0.2.5" resolved "https://registry.yarnpkg.com/printf/-/printf-0.2.5.tgz#c438ca2ca33e3927671db4ab69c0e52f936a4f0f"