From 95b71c3de15e695c56610984ad8e620b52be90ae Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 8 Nov 2020 19:17:25 +0000 Subject: [PATCH 01/32] improve component blueprint for octane (cherry picked from commit 5c57a588bd1195848a37f757aef84423344aa46e) --- blueprints/component-test/index.js | 58 ++++++++++++++-- .../__testType__/__path__/__test__.ts | 19 +++--- .../__testType__/__path__/__test__.ts | 19 +++--- .../__testType__/__path__/__test__.ts | 10 +-- .../__testType__/__path__/__test__.ts | 66 ++++++++++--------- .../__testType__/__path__/__test__.ts | 25 +++++-- .../files/__root__/__path__/__name__.ts | 6 +- .../__name__.hbs} | 0 .../__root__/__path__/__name__.ts | 4 +- .../__root__/__path__/component.ts | 6 +- jsconfig.json | 1 + 11 files changed, 141 insertions(+), 73 deletions(-) rename blueprints/component/glimmer-files/__root__/{__templatepath__/__templatename__.hbs => __path__/__name__.hbs} (100%) create mode 100644 jsconfig.json diff --git a/blueprints/component-test/index.js b/blueprints/component-test/index.js index c057e9a7..c32ef623 100644 --- a/blueprints/component-test/index.js +++ b/blueprints/component-test/index.js @@ -2,10 +2,17 @@ const path = require('path'); const stringUtil = require('ember-cli-string-utils'); +const isPackageMissing = require('ember-cli-is-package-missing'); const getPathOption = require('ember-cli-get-component-path-option'); +const semver = require('semver'); const useTestFrameworkDetector = require('../test-framework-detector'); +function invocationFor(options) { + let parts = options.entity.name.split('/'); + return parts.map((p) => stringUtil.classify(p)).join('::'); +} + module.exports = useTestFrameworkDetector({ description: 'Generates a component integration or unit test.', @@ -23,7 +30,7 @@ module.exports = useTestFrameworkDetector({ }, ], - fileMapTokens: function() { + fileMapTokens: function () { return { __root__() { return 'tests'; @@ -40,7 +47,7 @@ module.exports = useTestFrameworkDetector({ }; }, - locals: function(options) { + locals: function (options) { let dasherizedModuleName = stringUtil.dasherize(options.entity.name); let componentPathName = dasherizedModuleName; let testType = options.testType || 'integration'; @@ -55,11 +62,50 @@ module.exports = useTestFrameworkDetector({ componentPathName = [options.path, dasherizedModuleName].filter(Boolean).join('/'); } + let hbsImportStatement = this._useNamedHbsImport() + ? "import { hbs } from 'ember-cli-htmlbars';" + : "import hbs from 'htmlbars-inline-precompile';"; + + let templateInvocation = invocationFor(options); + let componentName = templateInvocation; + let openComponent = (descriptor) => `<${descriptor}>`; + let closeComponent = (descriptor) => ``; + let selfCloseComponent = (descriptor) => `<${descriptor} />`; + return { path: getPathOption(options), testType: testType, - componentPathName: componentPathName, - friendlyTestDescription: friendlyTestDescription, + componentName, + componentPathName, + templateInvocation, + openComponent, + closeComponent, + selfCloseComponent, + friendlyTestDescription, + hbsImportStatement, }; - } -}); + }, + + _useNamedHbsImport() { + let htmlbarsAddon = this.project.addons.find((a) => a.name === 'ember-cli-htmlbars'); + + if (htmlbarsAddon && semver.gte(htmlbarsAddon.pkg.version, '4.0.0-alpha.1')) { + return true; + } + + return false; + }, + + afterInstall: function (options) { + if ( + !options.dryRun && + options.testType === 'integration' && + !this._useNamedHbsImport() && + isPackageMissing(this, 'ember-cli-htmlbars-inline-precompile') + ) { + return this.addPackagesToProject([ + { name: 'ember-cli-htmlbars-inline-precompile', target: '^0.3.1' }, + ]); + } + }, +}); \ No newline at end of file diff --git a/blueprints/component-test/mocha-0.12-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/mocha-0.12-files/__root__/__testType__/__path__/__test__.ts index d44e26f9..b5d7178e 100644 --- a/blueprints/component-test/mocha-0.12-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/mocha-0.12-files/__root__/__testType__/__path__/__test__.ts @@ -13,19 +13,22 @@ describe('<%= friendlyTestDescription %>', function() { it('renders', function() { <% if (testType === 'integration' ) { %>// Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`<%= selfCloseComponent(componentName) %>`); + expect(this.$()).to.have.length(1); + // Template block usage: - // this.render(hbs` - // {{#<%= dasherizedModuleName %>}} - // template content - // {{/<%= dasherizedModuleName %>}} - // `); + this.render(hbs` + <%= openComponent(componentName) %> + template block text + <%= closeComponent(componentName) %> + `); - this.render(hbs`{{<%= dasherizedModuleName %>}}`); - expect(this.$()).to.have.length(1);<% } else if(testType === 'unit') { %>// creates the component instance + expect(this.$().text().trim()).to.equal('template block text');<% } else if(testType === 'unit') { %>// creates the component instance let component = this.subject(); // renders the component on the page this.render(); expect(component).to.be.ok; expect(this.$()).to.have.length(1);<% } %> }); -}); +}); \ No newline at end of file diff --git a/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts index 881086d0..277cb7e2 100644 --- a/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts @@ -12,15 +12,18 @@ describeComponent('<%= componentPathName %>', '<%= friendlyTestDescription %>', it('renders', function() { <% if (testType === 'integration' ) { %>// Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`<%= selfCloseComponent(componentName) %>`); + expect(this.$()).to.have.length(1); + // Template block usage: - // this.render(hbs` - // {{#<%= dasherizedModuleName %>}} - // template content - // {{/<%= dasherizedModuleName %>}} - // `); + this.render(hbs` + <%= openComponent(componentName) %> + template block text + <%= closeComponent(componentName) %> + `); - this.render(hbs`{{<%= dasherizedModuleName %>}}`); - expect(this.$()).to.have.length(1);<% } else if(testType === 'unit') { %>// creates the component instance + expect(this.$().text().trim()).to.equal('template block text');<% } else if(testType === 'unit') { %>// creates the component instance let component = this.subject(); // renders the component on the page this.render(); @@ -28,4 +31,4 @@ describeComponent('<%= componentPathName %>', '<%= friendlyTestDescription %>', expect(this.$()).to.have.length(1);<% } %> }); } -); +); \ No newline at end of file diff --git a/blueprints/component-test/mocha-rfc-232-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/mocha-rfc-232-files/__root__/__testType__/__path__/__test__.ts index e3afbedf..1c6b8ead 100644 --- a/blueprints/component-test/mocha-rfc-232-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/mocha-rfc-232-files/__root__/__testType__/__path__/__test__.ts @@ -2,7 +2,7 @@ import { describe, it } from 'mocha'; import { setupRenderingTest } from 'ember-mocha'; import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; +<%= hbsImportStatement %> describe('<%= friendlyTestDescription %>', function() { setupRenderingTest(); @@ -11,15 +11,15 @@ describe('<%= friendlyTestDescription %>', function() { // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.set('myAction', function(val) { ... }); - await render(hbs`{{<%= componentPathName %>}}`); + await render(hbs`<%= selfCloseComponent(componentName) %>`); expect(this.element.textContent.trim()).to.equal(''); // Template block usage: await render(hbs` - {{#<%= componentPathName %>}} + <%= openComponent(componentName) %> template block text - {{/<%= componentPathName %>}} + <%= closeComponent(componentName) %> `); expect(this.element.textContent.trim()).to.equal('template block text'); @@ -35,4 +35,4 @@ describe('<%= friendlyTestDescription %>', function() { let component = this.owner.factoryFor('component:<%= componentPathName %>').create(); expect(component).to.be.ok; }); -});<% } %> +});<% } %> \ No newline at end of file diff --git a/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts index faf52d99..70e16a81 100644 --- a/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts @@ -1,31 +1,37 @@ import { moduleForComponent, test } from 'ember-qunit';<% if (testType === 'integration') { %> -import hbs from 'htmlbars-inline-precompile';<% } %> - -moduleForComponent('<%= componentPathName %>', '<%= friendlyTestDescription %>', { - <% if (testType === 'integration' ) { %>integration: true<% } else if(testType === 'unit') { %>// Specify the other units that are required for this test - // needs: ['component:foo', 'helper:bar'], - unit: true<% } %> -}); - -test('it renders', function(assert) { - <% if (testType === 'integration' ) { %>// Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - this.render(hbs`{{<%= componentPathName %>}}`); - - assert.equal(this.$().text().trim(), ''); - - // Template block usage: - this.render(hbs` - {{#<%= componentPathName %>}} - template block text - {{/<%= componentPathName %>}} - `); - - assert.equal(this.$().text().trim(), 'template block text');<% } else if(testType === 'unit') { %> - // Creates the component instance - /*let component =*/ this.subject(); - // Renders the component to the page - this.render(); - assert.equal(this.$().text().trim(), '');<% } %> -}); + import hbs from 'htmlbars-inline-precompile';<% } %> + import { TestContext } from 'ember-test-helpers'; + + type Context = TestContext & { + <% if (testType === 'integration') { %>element: HTMLElement<% } %> + // add your test properties here + } + + moduleForComponent('<%= componentPathName %>', '<%= friendlyTestDescription %>', { + <% if (testType === 'integration' ) { %>integration: true<% } else if(testType === 'unit') { %>// Specify the other units that are required for this test + // needs: ['component:foo', 'helper:bar'], + unit: true<% } %> + }); + + test('it renders', function(this: Context, assert: Assert) { + <% if (testType === 'integration' ) { %>// Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`<%= selfCloseComponent(componentName) %>`); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage: + this.render(hbs` + <%= openComponent(componentName) %> + template block text + <%= closeComponent(componentName) %> + `); + + assert.equal(this.$().text().trim(), 'template block text');<% } else if(testType === 'unit') { %> + // Creates the component instance + /*let component =*/ this.subject(); + // Renders the component to the page + this.render(); + assert.equal(this.$().text().trim(), '');<% } %> + }); \ No newline at end of file diff --git a/blueprints/component-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.ts index 6173c9d6..1cc5f98c 100644 --- a/blueprints/component-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.ts @@ -1,36 +1,47 @@ <% if (testType === 'integration') { %>import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; +import { TestContext } from 'ember-test-helpers'; import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; +<%= hbsImportStatement %> + +type Context = TestContext & { + <% if (testType === 'integration') { %>element: HTMLElement<% } %> + // add your test properties here +} module('<%= friendlyTestDescription %>', function(hooks) { setupRenderingTest(hooks); - test('it renders', async function(assert) { + test('it renders', async function(this: Context, assert: Assert) { // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.set('myAction', function(val) { ... }); - await render(hbs`{{<%= componentPathName %>}}`); + await render(hbs`<%= selfCloseComponent(componentName) %>`); assert.equal(this.element.textContent.trim(), ''); // Template block usage: await render(hbs` - {{#<%= componentPathName %>}} + <%= openComponent(componentName) %> template block text - {{/<%= componentPathName %>}} + <%= closeComponent(componentName) %> `); assert.equal(this.element.textContent.trim(), 'template block text'); }); });<% } else if (testType === 'unit') { %>import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; +import { TestContext } from 'ember-test-helpers'; + +type Context = TestContext & { + // add your test properties here +} module('<%= friendlyTestDescription %>', function(hooks) { setupTest(hooks); - test('it exists', function(assert) { + test('it exists', function(this: Context, assert: Assert) { let component = this.owner.factoryFor('component:<%= componentPathName %>').create(); assert.ok(component); }); -});<% } %> +});<% } %> \ No newline at end of file diff --git a/blueprints/component/files/__root__/__path__/__name__.ts b/blueprints/component/files/__root__/__path__/__name__.ts index c9a1b45a..95c164be 100644 --- a/blueprints/component/files/__root__/__path__/__name__.ts +++ b/blueprints/component/files/__root__/__path__/__name__.ts @@ -1,7 +1,5 @@ import Component from '@ember/component'; <%= importTemplate %> -export default class <%= classifiedModuleName %> extends Component.extend({ - // anything which *must* be merged to prototype here -}) {<%= contents %> - // normal class body definition here +export default class <%= classifiedModuleName %> extends Component { + // class body definition here }; diff --git a/blueprints/component/glimmer-files/__root__/__templatepath__/__templatename__.hbs b/blueprints/component/glimmer-files/__root__/__path__/__name__.hbs similarity index 100% rename from blueprints/component/glimmer-files/__root__/__templatepath__/__templatename__.hbs rename to blueprints/component/glimmer-files/__root__/__path__/__name__.hbs diff --git a/blueprints/component/glimmer-files/__root__/__path__/__name__.ts b/blueprints/component/glimmer-files/__root__/__path__/__name__.ts index e9afc1a9..3c153c38 100644 --- a/blueprints/component/glimmer-files/__root__/__path__/__name__.ts +++ b/blueprints/component/glimmer-files/__root__/__path__/__name__.ts @@ -2,4 +2,6 @@ import Component from '@glimmer/component'; interface <%= classifiedModuleName %>Args {} -export default class <%= classifiedModuleName %> extends Component<<%= classifiedModuleName %>Args> {} +export default class <%= classifiedModuleName %> extends Component<<%= classifiedModuleName %>Args> { + // class body definition here +}; \ No newline at end of file diff --git a/blueprints/component/module-unification-files/__root__/__path__/component.ts b/blueprints/component/module-unification-files/__root__/__path__/component.ts index 37360e52..582c2549 100644 --- a/blueprints/component/module-unification-files/__root__/__path__/component.ts +++ b/blueprints/component/module-unification-files/__root__/__path__/component.ts @@ -1,7 +1,5 @@ import Component from '@ember/component'; -export default class <%= classifiedModuleName %> extends Component.extend({ - // anything which *must* be merged to prototype here -}) { - // normal class body definition here +export default class <%= classifiedModuleName %> extends Component { + // class body definition here }; diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 00000000..f408cac8 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1 @@ +{"compilerOptions":{"target":"es6","experimentalDecorators":true},"exclude":["node_modules","bower_components","tmp","vendor",".git","dist"]} \ No newline at end of file From eb10f7429dccd6011b7b62d6136d7dcfed0668c1 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 8 Nov 2020 19:38:23 +0000 Subject: [PATCH 02/32] remove unnecessary element definition (cherry picked from commit 9d721f87c7191ec496554875b737ef057ec90caa) --- .../qunit-files/__root__/__testType__/__path__/__test__.ts | 1 - .../__root__/__testType__/__path__/__test__.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts index 70e16a81..ba53607b 100644 --- a/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts @@ -3,7 +3,6 @@ import { moduleForComponent, test } from 'ember-qunit';<% if (testType === 'inte import { TestContext } from 'ember-test-helpers'; type Context = TestContext & { - <% if (testType === 'integration') { %>element: HTMLElement<% } %> // add your test properties here } diff --git a/blueprints/component-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.ts index 1cc5f98c..afff07aa 100644 --- a/blueprints/component-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.ts @@ -5,7 +5,6 @@ import { render } from '@ember/test-helpers'; <%= hbsImportStatement %> type Context = TestContext & { - <% if (testType === 'integration') { %>element: HTMLElement<% } %> // add your test properties here } From 6fbeb4e9bb2a4ac86e7fa32c88a562e2ea9e81a1 Mon Sep 17 00:00:00 2001 From: Bryan Date: Sun, 15 Nov 2020 13:59:38 +0000 Subject: [PATCH 03/32] Update blueprints/component/files/__root__/__path__/__name__.ts remove comment Co-authored-by: Chris Krycho (cherry picked from commit 3e86833a44b26a8298df704202d55da9b2e4813b) --- blueprints/component/files/__root__/__path__/__name__.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/blueprints/component/files/__root__/__path__/__name__.ts b/blueprints/component/files/__root__/__path__/__name__.ts index 95c164be..ed14860d 100644 --- a/blueprints/component/files/__root__/__path__/__name__.ts +++ b/blueprints/component/files/__root__/__path__/__name__.ts @@ -1,5 +1,4 @@ import Component from '@ember/component'; <%= importTemplate %> export default class <%= classifiedModuleName %> extends Component { - // class body definition here }; From 3111707b3481ef19f2ce8b3bccbe9f146e700c59 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 15 Nov 2020 14:06:11 +0000 Subject: [PATCH 04/32] remove module unification files (cherry picked from commit d152c31e0e164d811c98870d043fe6a3729ec11c) --- .../module-unification-files/__root__/__path__/component.ts | 5 ----- .../module-unification-files/__root__/__path__/template.hbs | 1 - 2 files changed, 6 deletions(-) delete mode 100644 blueprints/component/module-unification-files/__root__/__path__/component.ts delete mode 100644 blueprints/component/module-unification-files/__root__/__path__/template.hbs diff --git a/blueprints/component/module-unification-files/__root__/__path__/component.ts b/blueprints/component/module-unification-files/__root__/__path__/component.ts deleted file mode 100644 index 582c2549..00000000 --- a/blueprints/component/module-unification-files/__root__/__path__/component.ts +++ /dev/null @@ -1,5 +0,0 @@ -import Component from '@ember/component'; - -export default class <%= classifiedModuleName %> extends Component { - // class body definition here -}; diff --git a/blueprints/component/module-unification-files/__root__/__path__/template.hbs b/blueprints/component/module-unification-files/__root__/__path__/template.hbs deleted file mode 100644 index fb5c4b15..00000000 --- a/blueprints/component/module-unification-files/__root__/__path__/template.hbs +++ /dev/null @@ -1 +0,0 @@ -{{yield}} \ No newline at end of file From 6055241b031553c30ddc402400979da992237b2c Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 15 Nov 2020 14:17:20 +0000 Subject: [PATCH 05/32] remove ember-cli-shims and add peer dependencies (cherry picked from commit 02217a62168493dfcfeefa308da11edd56f1d70c) --- package.json | 3 +- yarn.lock | 593 ++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 571 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index dfb3c291..2d9ed4c0 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "silent-error": "^1.1.0" }, "devDependencies": { + "@babel/core": "^7.12.3", "@typed-ember/renovate-config": "1.2.1", "broccoli-asset-rev": "3.0.0", "ember-ajax": "5.0.0", @@ -45,7 +46,6 @@ "ember-cli-htmlbars": "4.3.1", "ember-cli-inject-live-reload": "2.0.2", "ember-cli-qunit": "4.4.0", - "ember-cli-shims": "1.2.0", "ember-cli-sri": "2.1.1", "ember-cli-uglify": "3.0.0", "ember-disable-prototype-extensions": "1.1.3", @@ -56,6 +56,7 @@ "ember-source": "3.17.3", "ember-source-channel-url": "2.0.1", "ember-try": "1.4.0", + "eslint": "^7.13.0", "eslint-plugin-ember": "7.13.0", "eslint-plugin-node": "11.1.0", "loader.js": "4.7.0", diff --git a/yarn.lock b/yarn.lock index c5217786..2707cb8f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,13 @@ dependencies: "@babel/highlight" "^7.0.0" +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/code-frame@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" @@ -52,6 +59,28 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.12.3": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.3.3": version "7.6.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" @@ -145,6 +174,15 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" + integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== + dependencies: + "@babel/types" "^7.12.5" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/generator@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" @@ -407,6 +445,15 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + "@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" @@ -432,6 +479,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + "@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" @@ -474,6 +528,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c" + integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ== + dependencies: + "@babel/types" "^7.12.1" + "@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" @@ -502,6 +563,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-module-imports@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + "@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" @@ -528,6 +596,21 @@ "@babel/types" "^7.0.0" lodash "^4.17.10" +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + "@babel/helper-module-transforms@^7.7.4", "@babel/helper-module-transforms@^7.7.5": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835" @@ -560,6 +643,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + "@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" @@ -648,6 +738,16 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-replace-supers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" + integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + "@babel/helper-replace-supers@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz#4f56adb6aedcd449d2da9399c2dcf0545463b64c" @@ -696,6 +796,13 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + "@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" @@ -719,6 +826,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + "@babel/helper-split-export-declaration@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" @@ -747,6 +861,11 @@ dependencies: "@babel/types" "^7.8.3" +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + "@babel/helper-validator-identifier@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" @@ -791,6 +910,15 @@ "@babel/traverse" "^7.1.5" "@babel/types" "^7.1.5" +"@babel/helpers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + "@babel/helpers@^7.4.3": version "7.4.3" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.3.tgz#7b1d354363494b31cb9a2417ae86af32b7853a3b" @@ -836,6 +964,15 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/highlight@^7.8.3": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" @@ -850,6 +987,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.5.tgz#20b7d5e7e1811ba996f8a868962ea7dd2bfcd2fc" integrity sha512-WXKf5K5HT6X0kKiCOezJZFljsfxKV1FpU8Tf1A7ZpGvyd/Q4hlrJm2EwoH2onaUq3O4tLDp+4gk0hHPsMyxmOg== +"@babel/parser@^7.10.4", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0" + integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ== + "@babel/parser@^7.4.0": version "7.4.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.2.tgz#b4521a400cb5a871eab3890787b4bc1326d38d91" @@ -2268,6 +2410,15 @@ "@babel/parser" "^7.1.2" "@babel/types" "^7.1.2" +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/template@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b" @@ -2319,6 +2470,21 @@ globals "^11.1.0" lodash "^4.17.10" +"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.5.tgz#78a0c68c8e8a35e4cacfd31db8bb303d5606f095" + integrity sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.5" + "@babel/types" "^7.12.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + "@babel/traverse@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.0.tgz#14006967dd1d2b3494cdd650c686db9daf0ddada" @@ -2433,6 +2599,15 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" +"@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5": + version "7.12.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.6.tgz#ae0e55ef1cce1fbc881cd26f8234eb3e657edc96" + integrity sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@babel/types@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" @@ -2516,6 +2691,22 @@ ember-cli-babel "^6.12.0" ember-cli-htmlbars-inline-precompile "^1.0.0" +"@eslint/eslintrc@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" + integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" @@ -2588,16 +2779,36 @@ acorn-jsx@^5.0.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.0.tgz#958584ddb60990c02c97c1bd9d521fce433bb101" integrity sha512-XkB50fn0MURDyww9+UYL3c1yLbOBz0ZFvrdYlGB8l+Ije1oSC75qAqrzSPjYQbdnQUzhlUGNKuesryAv0gxZOg== +acorn-jsx@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + acorn@^6.0.2: version "6.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" integrity sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg== +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@^6.5.3: version "6.5.5" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1" @@ -2633,6 +2844,11 @@ ansi-colors@3.2.3: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -2658,6 +2874,11 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +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-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -2808,6 +3029,11 @@ ast-types@0.13.1: resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.1.tgz#9461428a270c5a27fda44b738dd3bab2e9353003" integrity sha512-b+EeK0WlzrSmpMw5jktWvQGxblpWnvMrV+vOp69RLjzGiHwWV0vgq75DPKtUjppKni3yWwSW8WLGV3Ch/XIWcQ== +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.3" resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-1.3.3.tgz#6040486660b370e4051cd9fa9fee275e1fae3728" @@ -3871,14 +4097,6 @@ broccoli-debug@^0.6.3, broccoli-debug@^0.6.5: symlink-or-copy "^1.1.8" tree-sync "^1.2.2" -broccoli-file-creator@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/broccoli-file-creator/-/broccoli-file-creator-1.2.0.tgz#27f1b25b1b00e7bb7bf3d5d7abed5f4d5388df4d" - integrity sha512-l9zthHg6bAtnOfRr/ieZ1srRQEsufMZID7xGYRW3aBDv3u/3Eux+Iawl10tAGYE5pL9YB4n5X4vxkp6iNOoZ9g== - dependencies: - broccoli-plugin "^1.1.0" - mkdirp "^0.5.1" - broccoli-filter@^1.2.2, broccoli-filter@^1.2.3: version "1.3.0" resolved "https://registry.yarnpkg.com/broccoli-filter/-/broccoli-filter-1.3.0.tgz#71e3a8e32a17f309e12261919c5b1006d6766de6" @@ -4141,7 +4359,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.0.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== @@ -4367,6 +4585,11 @@ callsites@^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== + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -4511,6 +4734,14 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -4917,6 +5148,15 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + 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" @@ -5012,7 +5252,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -5120,6 +5360,13 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +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" + dot-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" @@ -5503,17 +5750,6 @@ ember-cli-qunit@4.4.0: ember-cli-babel "^6.11.0" ember-qunit "^3.5.0" -ember-cli-shims@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ember-cli-shims/-/ember-cli-shims-1.2.0.tgz#0f53aff0aab80b5f29da3a9731bac56169dd941f" - integrity sha1-D1Ov8Kq4C18p2jqXMbrFYWndlB8= - dependencies: - broccoli-file-creator "^1.1.1" - broccoli-merge-trees "^2.0.0" - ember-cli-version-checker "^2.0.0" - ember-rfc176-data "^0.3.1" - silent-error "^1.0.1" - ember-cli-sri@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ember-cli-sri/-/ember-cli-sri-2.1.1.tgz#971620934a4b9183cf7923cc03e178b83aa907fd" @@ -5750,7 +5986,7 @@ ember-resolver@7.0.0: ember-cli-version-checker "^3.1.3" resolve "^1.14.0" -ember-rfc176-data@^0.3.0, ember-rfc176-data@^0.3.1: +ember-rfc176-data@^0.3.0: version "0.3.3" resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.3.tgz#27fba08d540a7463a4366c48eaa19c5a44971a39" integrity sha1-J/ugjVQKdGOkNmxI6qGcWkSXGjk= @@ -5916,6 +6152,13 @@ engine.io@~3.2.0: engine.io-parser "~2.1.0" ws "~3.3.1" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz#a65b3e42d0b71cfc585eb774f9943c8d9b91b0c2" @@ -6068,6 +6311,14 @@ eslint-scope@^4.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + eslint-utils@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" @@ -6080,6 +6331,13 @@ eslint-utils@^2.0.0: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" @@ -6090,6 +6348,16 @@ 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-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + eslint@^5.6.0: version "5.9.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.9.0.tgz#b234b6d15ef84b5849c6de2af43195a2d59d408e" @@ -6134,6 +6402,49 @@ eslint@^5.6.0: table "^5.0.2" text-table "^0.2.0" +eslint@^7.13.0: + version "7.13.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.13.0.tgz#7f180126c0dcdef327bfb54b211d7802decc08da" + integrity sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.1" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + espree@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" @@ -6143,6 +6454,15 @@ espree@^4.0.0: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" +espree@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" + integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.3.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" @@ -6160,6 +6480,13 @@ esquery@^1.0.1: dependencies: estraverse "^4.0.0" +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" @@ -6167,11 +6494,23 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -6421,12 +6760,17 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + 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" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.4: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -6481,6 +6825,13 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" +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 "^2.0.1" + filesize@^3.1.3: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" @@ -6610,6 +6961,15 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" +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: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + flat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" @@ -6617,6 +6977,11 @@ flat@^4.1.0: dependencies: is-buffer "~2.0.3" +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + follow-redirects@^1.0.0: version "1.5.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.6.tgz#44eb4fe1981dff25e2bd86b7d4033abcdb81e965" @@ -6920,6 +7285,13 @@ git-write-pkt-line@0.1.0: bops "0.0.3" through "~2.2.7" +glob-parent@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -6992,6 +7364,13 @@ globals@^11.1.0, globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" integrity sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg== +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -7324,6 +7703,14 @@ ignore@^5.1.1: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.1.tgz#2fc6b8f518aff48fef65a7f348ed85632448e4a5" integrity sha512-DWjnQIFLenVrwyRCKZT+7a7/U4Cqgar4WG8V++K3hw+lrW1hc/SIwdiGmtxKCVACmHULTuGeBbHJmbwW7/sAvA== +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" + integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== + 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" @@ -7524,7 +7911,7 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^2.1.0: +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -7560,6 +7947,13 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -7763,6 +8157,14 @@ js-yaml@3.13.1, js-yaml@^3.12.0, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.6.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -7915,6 +8317,14 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + line-stream@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/line-stream/-/line-stream-0.0.0.tgz#888b7cc7951c6a05ce4d696dd1e6b8262371bb45" @@ -8355,6 +8765,11 @@ lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + log-symbols@2.2.0, log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -9068,6 +9483,18 @@ optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + ora@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b" @@ -9173,6 +9600,13 @@ package-json@^4.0.1: registry-url "^3.0.3" semver "^5.1.0" +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-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -9243,6 +9677,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.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.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -9339,6 +9778,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -9692,6 +10136,11 @@ regexpp@^3.0.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -9866,6 +10315,11 @@ 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-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: version "1.2.7" resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.7.tgz#2a7bc37ad96865e239330e3102c31322847e652e" @@ -9979,6 +10433,13 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +rimraf@2.6.3: + 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.1.4, rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" @@ -10117,6 +10578,11 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.1: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" @@ -10188,11 +10654,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" @@ -10229,6 +10707,15 @@ slice-ansi@1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" +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" + snake-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.3.tgz#c598b822ab443fcbb145ae8a82c5e43526d5bbee" @@ -10566,6 +11053,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + 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-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -10595,6 +11089,11 @@ strip-json-comments@2.0.1, strip-json-comments@^2.0.1, strip-json-comments@~2.0. resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + styled_string@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/styled_string/-/styled_string-0.0.1.tgz#d22782bd81295459bc4f1df18c4bad8e94dd124a" @@ -10659,6 +11158,16 @@ table@^5.0.2: slice-ansi "1.0.0" string-width "^2.1.1" +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 "^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" resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-7.0.0.tgz#54db35302fda2c2ccc21954ad3be22b2cba42721" @@ -10905,6 +11414,13 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -10927,6 +11443,11 @@ type-detect@^4.0.0: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.15, type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" @@ -11128,6 +11649,11 @@ uuid@^3.0.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + 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" @@ -11256,6 +11782,13 @@ which@1.3.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" + wide-align@1.1.3, wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -11263,6 +11796,11 @@ wide-align@1.1.3, 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" @@ -11319,6 +11857,13 @@ write-file-atomic@^2.0.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +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" + write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" From b9e0ad26454b6c8732e91b5aa4ff281e00740d55 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 15 Nov 2020 14:24:19 +0000 Subject: [PATCH 06/32] use node 12 to build on travis (cherry picked from commit ef7d2926e8046f49096be3cd6aedeacec28d3671) (cherry picked from commit 9f0269e14724311fef5646663c98eef377a219e3) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 16f9aa4e..2ea4b035 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ language: node_js node_js: # we recommend testing addons with the same minimum supported node version as Ember CLI # so that your addon works for all apps - - "8" + - "12" sudo: false dist: trusty From 25f77b0f223170612438d712e8f6c11f87135fdb Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 15 Nov 2020 14:41:18 +0000 Subject: [PATCH 07/32] fix no-prototype-builtins (cherry picked from commit 3c59cf85e621a5fac1bf8a371653918264bba706) --- lib/utilities/update-paths-for-addon.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/utilities/update-paths-for-addon.js b/lib/utilities/update-paths-for-addon.js index 02ddcb05..9bb15c0f 100644 --- a/lib/utilities/update-paths-for-addon.js +++ b/lib/utilities/update-paths-for-addon.js @@ -14,10 +14,10 @@ module.exports = function(paths, addonName, appName, options) { appStarPaths = paths[appNameStar] = paths[appNameStar] || []; if (options.removePaths) { - if (paths.hasOwnProperty(addonName)) { + if (Object.prototype.hasOwnProperty.call(paths, addonName)) { delete paths[addonName]; } - if (paths.hasOwnProperty(addonNameStar)) { + if (Object.prototype.hasOwnProperty.call(paths, addonNameStar)) { delete paths[addonNameStar] } let addonAppPathIndex = appStarPaths.indexOf([addonAppPath, '*'].join('/')); @@ -26,16 +26,16 @@ module.exports = function(paths, addonName, appName, options) { paths[appNameStar] = appStarPaths; } } else { - if (!paths.hasOwnProperty(addonName)) { + if (!Object.prototype.hasOwnProperty.call(paths, addonName)) { paths[addonName] = [ addonAddonPath ]; } - if (!paths.hasOwnProperty(addonNameStar)) { + if (!Object.prototype.hasOwnProperty.call(paths, (addonNameStar)) { paths[addonNameStar] = [ [addonAddonPath, '*'].join('/') ]; } - if (!paths.hasOwnProperty(addonTestSupportPath)) { + if (!Object.prototype.hasOwnProperty.call(paths, addonTestSupportPath)) { paths[addonTestSupportPath] = [ [addonPath, 'addon-test-support'].join('/') ]; } - if (!paths.hasOwnProperty(addonTestSupportStarPath)) { + if (!Object.prototype.hasOwnProperty.call(paths, addonTestSupportStarPath)) { paths[addonTestSupportStarPath] = [ [addonPath, 'addon-test-support', '*'].join('/') ]; } if (appStarPaths.indexOf(addonAppPath) === -1) { From 71a23316df0ba017dc5e4ec52e3dde61c555d260 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 15 Nov 2020 14:51:47 +0000 Subject: [PATCH 08/32] fix typo (cherry picked from commit 76c8799a43dfa9cb2c504b29fb2032bc724f4f4f) --- lib/utilities/update-paths-for-addon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utilities/update-paths-for-addon.js b/lib/utilities/update-paths-for-addon.js index 9bb15c0f..8edf7e6d 100644 --- a/lib/utilities/update-paths-for-addon.js +++ b/lib/utilities/update-paths-for-addon.js @@ -29,7 +29,7 @@ module.exports = function(paths, addonName, appName, options) { if (!Object.prototype.hasOwnProperty.call(paths, addonName)) { paths[addonName] = [ addonAddonPath ]; } - if (!Object.prototype.hasOwnProperty.call(paths, (addonNameStar)) { + if (!Object.prototype.hasOwnProperty.call(paths, addonNameStar)) { paths[addonNameStar] = [ [addonAddonPath, '*'].join('/') ]; } if (!Object.prototype.hasOwnProperty.call(paths, addonTestSupportPath)) { From 8a74feec63b6a926af5ce46362db54ae084b6820 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 15 Nov 2020 14:55:44 +0000 Subject: [PATCH 09/32] add extraneous modules (cherry picked from commit 58d64997fef3297d34e7df21deeba9a17e0f2230) --- package.json | 2 ++ yarn.lock | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 2d9ed4c0..9d89f3b0 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "ember-cli-eslint": "5.1.0", "ember-cli-htmlbars": "4.3.1", "ember-cli-inject-live-reload": "2.0.2", + "ember-cli-is-package-missing": "^1.0.0", "ember-cli-qunit": "4.4.0", "ember-cli-sri": "2.1.1", "ember-cli-uglify": "3.0.0", @@ -62,6 +63,7 @@ "loader.js": "4.7.0", "mocha": "6.2.2", "qunit-dom": "0.9.2", + "semver": "^7.3.2", "testdouble": "3.16.0" }, "engines": { diff --git a/yarn.lock b/yarn.lock index 2707cb8f..28d1e4c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10578,7 +10578,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1: +semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== From 7bf406596f39548eb63ae86c3c90e5bba754d299 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 15 Nov 2020 15:01:58 +0000 Subject: [PATCH 10/32] move extraneous packages to dependencies (cherry picked from commit ce84d15a7c68291b1286c06984b8e3609c2e1812) --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9d89f3b0..fb4b457e 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "chalk": "^3.0.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", "ember-cli-path-utils": "^1.0.0", "ember-cli-string-utils": "^1.1.0", @@ -32,6 +33,7 @@ "exists-sync": "^0.1.0", "fs-extra": "^8.0.0", "inflection": "^1.12.0", + "semver": "^7.3.2", "silent-error": "^1.1.0" }, "devDependencies": { @@ -45,7 +47,6 @@ "ember-cli-eslint": "5.1.0", "ember-cli-htmlbars": "4.3.1", "ember-cli-inject-live-reload": "2.0.2", - "ember-cli-is-package-missing": "^1.0.0", "ember-cli-qunit": "4.4.0", "ember-cli-sri": "2.1.1", "ember-cli-uglify": "3.0.0", @@ -63,7 +64,6 @@ "loader.js": "4.7.0", "mocha": "6.2.2", "qunit-dom": "0.9.2", - "semver": "^7.3.2", "testdouble": "3.16.0" }, "engines": { From 48fb02d238e267da8a5eca31d30a0cb666a92e4c Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 15 Nov 2020 14:57:42 +0000 Subject: [PATCH 11/32] fix no-undef (cherry picked from commit dc4c154ad3e814f6bc964ac49eb9d183edad5d7a) --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index 008c09a6..20afbd86 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,3 +1,4 @@ +/* eslint-env node */ module.exports = { root: true, parserOptions: { From ad17126774b9ce5b3f2ceaed8b1c795988adba13 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 15 Nov 2020 17:40:19 +0000 Subject: [PATCH 12/32] run with node 12 on appveyor --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 82599df0..914eef45 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,7 @@ init: # Test against these versions of Node.js. environment: matrix: - - nodejs_version: "8" + - nodejs_version: "12" # Install scripts. (runs after repo cloning) install: From bb3bd3f76b1d1bf7d9109990d85ef9e7794452e2 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Sun, 15 Nov 2020 18:10:31 +0000 Subject: [PATCH 13/32] remove comment --- blueprints/component/glimmer-files/__root__/__path__/__name__.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/blueprints/component/glimmer-files/__root__/__path__/__name__.ts b/blueprints/component/glimmer-files/__root__/__path__/__name__.ts index 3c153c38..9fa75411 100644 --- a/blueprints/component/glimmer-files/__root__/__path__/__name__.ts +++ b/blueprints/component/glimmer-files/__root__/__path__/__name__.ts @@ -3,5 +3,4 @@ import Component from '@glimmer/component'; interface <%= classifiedModuleName %>Args {} export default class <%= classifiedModuleName %> extends Component<<%= classifiedModuleName %>Args> { - // class body definition here }; \ No newline at end of file From eedab5d78fb11be06fdb1f2b4b6006da4fe2615d Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Mon, 16 Nov 2020 18:28:13 +0000 Subject: [PATCH 14/32] tidy up --- .../__root__/__path__/__name__.ts | 3 +- package.json | 3 +- yarn.lock | 216 ++++++++++++++---- 3 files changed, 179 insertions(+), 43 deletions(-) diff --git a/blueprints/component/glimmer-files/__root__/__path__/__name__.ts b/blueprints/component/glimmer-files/__root__/__path__/__name__.ts index 9fa75411..7e34baa2 100644 --- a/blueprints/component/glimmer-files/__root__/__path__/__name__.ts +++ b/blueprints/component/glimmer-files/__root__/__path__/__name__.ts @@ -1,6 +1,7 @@ import Component from '@glimmer/component'; -interface <%= classifiedModuleName %>Args {} +interface <%= classifiedModuleName %>Args { +} export default class <%= classifiedModuleName %> extends Component<<%= classifiedModuleName %>Args> { }; \ No newline at end of file diff --git a/package.json b/package.json index d39084a4..bcf175af 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,6 @@ "ember-cli-eslint": "5.1.0", "ember-cli-htmlbars": "5.3.1", "ember-cli-inject-live-reload": "2.0.2", - "ember-qunit": "4.6.0", "ember-cli-shims": "1.2.0", "ember-cli-sri": "2.1.1", "ember-cli-uglify": "3.0.0", @@ -55,10 +54,12 @@ "ember-export-application-global": "2.0.1", "ember-load-initializers": "2.1.1", "ember-maybe-import-regenerator": "0.1.6", + "ember-qunit": "4.6.0", "ember-resolver": "8.0.2", "ember-source": "3.17.3", "ember-source-channel-url": "2.0.1", "ember-try": "1.4.0", + "eslint": "^7.13.0", "eslint-plugin-ember": "9.6.0", "eslint-plugin-node": "11.1.0", "loader.js": "4.7.0", diff --git a/yarn.lock b/yarn.lock index ae2c5290..5c08f603 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,7 +23,7 @@ invariant "^2.2.4" semver "^5.5.0" -"@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.3.4", "@babel/core@^7.8.4": +"@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.3.4", "@babel/core@^7.8.4": version "7.12.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== @@ -1472,6 +1472,22 @@ ember-cli-htmlbars-inline-precompile "^2.1.0" ember-test-waiters "^1.1.1" +"@eslint/eslintrc@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" + integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@nodelib/fs.scandir@2.1.3": version "2.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" @@ -1493,22 +1509,6 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" -"@eslint/eslintrc@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" - integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - lodash "^4.17.19" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" @@ -1716,6 +1716,11 @@ ansi-colors@3.2.3: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -2902,6 +2907,14 @@ broccoli-debug@^0.6.4, broccoli-debug@^0.6.5: symlink-or-copy "^1.1.8" tree-sync "^1.2.2" +broccoli-file-creator@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/broccoli-file-creator/-/broccoli-file-creator-1.2.0.tgz#27f1b25b1b00e7bb7bf3d5d7abed5f4d5388df4d" + integrity sha512-l9zthHg6bAtnOfRr/ieZ1srRQEsufMZID7xGYRW3aBDv3u/3Eux+Iawl10tAGYE5pL9YB4n5X4vxkp6iNOoZ9g== + dependencies: + broccoli-plugin "^1.1.0" + mkdirp "^0.5.1" + broccoli-filter@^1.2.2, broccoli-filter@^1.2.3: version "1.3.0" resolved "https://registry.yarnpkg.com/broccoli-filter/-/broccoli-filter-1.3.0.tgz#71e3a8e32a17f309e12261919c5b1006d6766de6" @@ -3144,7 +3157,7 @@ broccoli-plugin@1.1.0: rimraf "^2.3.4" symlink-or-copy "^1.0.1" -broccoli-plugin@^1.0.0, broccoli-plugin@^1.2.0, broccoli-plugin@^1.2.1, broccoli-plugin@^1.3.0: +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== @@ -3392,7 +3405,7 @@ callsites@^0.2.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= -callsites@^3.1.0: +callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== @@ -3902,7 +3915,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4412,6 +4425,17 @@ ember-cli-preprocess-registry@^3.3.0: debug "^3.0.1" process-relative-require "^1.0.0" +ember-cli-shims@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ember-cli-shims/-/ember-cli-shims-1.2.0.tgz#0f53aff0aab80b5f29da3a9731bac56169dd941f" + integrity sha1-D1Ov8Kq4C18p2jqXMbrFYWndlB8= + dependencies: + broccoli-file-creator "^1.1.1" + broccoli-merge-trees "^2.0.0" + ember-cli-version-checker "^2.0.0" + ember-rfc176-data "^0.3.1" + silent-error "^1.0.1" + ember-cli-sri@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ember-cli-sri/-/ember-cli-sri-2.1.1.tgz#971620934a4b9183cf7923cc03e178b83aa907fd" @@ -4819,6 +4843,13 @@ engine.io@~3.2.0: engine.io-parser "~2.1.0" ws "~3.3.1" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.0.2, ensure-posix-path@^1.1.0, ensure-posix-path@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce" @@ -4942,6 +4973,13 @@ eslint-utils@^2.0.0: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" @@ -5001,6 +5039,49 @@ eslint@^5.6.0: table "^5.0.2" text-table "^0.2.0" +eslint@^7.13.0: + version "7.13.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.13.0.tgz#7f180126c0dcdef327bfb54b211d7802decc08da" + integrity sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.1" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + esm@^3.2.4: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" @@ -5254,6 +5335,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + fast-glob@^3.0.3: version "3.2.4" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" @@ -5347,6 +5433,13 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" +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 "^2.0.1" + filesize@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" @@ -5811,7 +5904,7 @@ git-write-pkt-line@0.1.0: bops "0.0.3" through "~2.2.7" -glob-parent@^5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -6464,13 +6557,6 @@ is-language-code@^1.0.12: resolved "https://registry.yarnpkg.com/is-language-code/-/is-language-code-1.0.13.tgz#599988536481315914e2b4b35d3eac6dfadd933c" integrity sha512-yEJ8Am1oh+bp596dgtfVFrYzx7d3W3k6LZDSLL3fBgk+YI30zT+tYO/pdNimONtCLc4pAmnCvE6s+aNxMOAmlQ== -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -7294,11 +7380,6 @@ lodash@^4.0.0, lodash@^4.16.1, lodash@^4.17.10, lodash@^4.17.12, lodash@^4.17.13 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -lodash@^4.17.19: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - log-symbols@2.2.0, log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -7932,6 +8013,18 @@ optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + ora@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" @@ -8051,6 +8144,13 @@ package-json@^4.0.1: registry-url "^3.0.3" semver "^5.1.0" +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-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -8645,6 +8745,11 @@ 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-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: version "1.2.7" resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.7.tgz#2a7bc37ad96865e239330e3102c31322847e652e" @@ -8707,6 +8812,13 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +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.1.4, rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -8721,13 +8833,6 @@ rimraf@^3.0.0, rimraf@^3.0.1, rimraf@^3.0.2: dependencies: glob "^7.1.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" - 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" @@ -8819,7 +8924,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.3.2: +semver@^7.0.0, semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== @@ -9264,6 +9369,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + 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-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" @@ -9630,6 +9742,13 @@ tslib@^1.10.0, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -9657,6 +9776,11 @@ type-fest@^0.11.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -9844,6 +9968,11 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" @@ -9954,6 +10083,11 @@ wide-align@1.1.3, 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.3: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" From c1b73fbd61b6e9c167eca2ccade484de357c9aba Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 17 Nov 2020 15:36:45 +0000 Subject: [PATCH 15/32] yarn lock clean up --- yarn.lock | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index b89bf9d1..b3e5a9c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1716,12 +1716,7 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1: +ansi-colors@4.1.1, ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== @@ -5624,6 +5619,15 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" +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: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -5926,7 +5930,7 @@ git-write-pkt-line@0.1.0: bops "0.0.3" through "~2.2.7" -glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -9406,7 +9410,7 @@ strip-final-newline@^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@3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -9416,11 +9420,6 @@ strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - styled_string@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/styled_string/-/styled_string-0.0.1.tgz#d22782bd81295459bc4f1df18c4bad8e94dd124a" From 71dae68353d8232e11f67b10c32e727efd2d6aaf Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 17 Nov 2020 15:41:32 +0000 Subject: [PATCH 16/32] remove jquery from generated tests --- .../mocha-files/__root__/__testType__/__path__/__test__.ts | 6 +++--- .../qunit-files/__root__/__testType__/__path__/__test__.ts | 6 +++--- .../mocha-files/tests/__testType__/helpers/__name__-test.ts | 2 +- node-tests/fixtures/component-test/default-template.ts | 4 ++-- node-tests/fixtures/component-test/default.ts | 4 ++-- node-tests/fixtures/component-test/mocha-unit.ts | 2 +- node-tests/fixtures/component-test/mocha.ts | 2 +- node-tests/fixtures/component-test/unit.ts | 2 +- node-tests/fixtures/helper-test/mocha.ts | 2 +- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts index 277cb7e2..0581af28 100644 --- a/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts @@ -14,7 +14,7 @@ describeComponent('<%= componentPathName %>', '<%= friendlyTestDescription %>', // Handle any actions with this.on('myAction', function(val) { ... }); this.render(hbs`<%= selfCloseComponent(componentName) %>`); - expect(this.$()).to.have.length(1); + expect(this.element).to.not.be.null; // Template block usage: this.render(hbs` @@ -23,12 +23,12 @@ describeComponent('<%= componentPathName %>', '<%= friendlyTestDescription %>', <%= closeComponent(componentName) %> `); - expect(this.$().text().trim()).to.equal('template block text');<% } else if(testType === 'unit') { %>// creates the component instance + expect(this.element.text().trim()).to.equal('template block text');<% } else if(testType === 'unit') { %>// creates the component instance let component = this.subject(); // renders the component on the page this.render(); expect(component).to.be.ok; - expect(this.$()).to.have.length(1);<% } %> + expect(this.element).to.not.be.null;<% } %> }); } ); \ No newline at end of file diff --git a/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts index ba53607b..c6a76617 100644 --- a/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts @@ -18,7 +18,7 @@ import { moduleForComponent, test } from 'ember-qunit';<% if (testType === 'inte this.render(hbs`<%= selfCloseComponent(componentName) %>`); - assert.equal(this.$().text().trim(), ''); + assert.equal(this.element.text().trim(), ''); // Template block usage: this.render(hbs` @@ -27,10 +27,10 @@ import { moduleForComponent, test } from 'ember-qunit';<% if (testType === 'inte <%= closeComponent(componentName) %> `); - assert.equal(this.$().text().trim(), 'template block text');<% } else if(testType === 'unit') { %> + assert.equal(this.element.text().trim(), 'template block text');<% } else if(testType === 'unit') { %> // Creates the component instance /*let component =*/ this.subject(); // Renders the component to the page this.render(); - assert.equal(this.$().text().trim(), '');<% } %> + assert.equal(this.element.text().trim(), '');<% } %> }); \ No newline at end of file diff --git a/blueprints/helper-test/mocha-files/tests/__testType__/helpers/__name__-test.ts b/blueprints/helper-test/mocha-files/tests/__testType__/helpers/__name__-test.ts index 8a36c684..5abc73b0 100644 --- a/blueprints/helper-test/mocha-files/tests/__testType__/helpers/__name__-test.ts +++ b/blueprints/helper-test/mocha-files/tests/__testType__/helpers/__name__-test.ts @@ -21,7 +21,7 @@ describe('<%= friendlyTestName %>', function() { this.render(hbs`{{<%= dasherizedModuleName %> inputValue}}`); - expect(this.$().text().trim()).to.equal('1234'); + expect(this.element.text().trim()).to.equal('1234'); }); }); <% } else if (testType == 'unit') { %>import { describe, it } from 'mocha'; diff --git a/node-tests/fixtures/component-test/default-template.ts b/node-tests/fixtures/component-test/default-template.ts index 429413ea..65f05b63 100644 --- a/node-tests/fixtures/component-test/default-template.ts +++ b/node-tests/fixtures/component-test/default-template.ts @@ -11,7 +11,7 @@ test('it renders', function(assert) { this.render(hbs`{{<%= path =%><%= component =%>}}`); - assert.equal(this.$().text().trim(), ''); + assert.equal(this.element.text().trim(), ''); // Template block usage: this.render(hbs` @@ -20,5 +20,5 @@ test('it renders', function(assert) { {{/<%= path =%><%= component =%>}} `); - assert.equal(this.$().text().trim(), 'template block text'); + assert.equal(this.element.text().trim(), 'template block text'); }); diff --git a/node-tests/fixtures/component-test/default.ts b/node-tests/fixtures/component-test/default.ts index 1588a560..5314cf21 100644 --- a/node-tests/fixtures/component-test/default.ts +++ b/node-tests/fixtures/component-test/default.ts @@ -11,7 +11,7 @@ test('it renders', function(assert) { this.render(hbs`{{x-foo}}`); - assert.equal(this.$().text().trim(), ''); + assert.equal(this.element.text().trim(), ''); // Template block usage: this.render(hbs` @@ -20,5 +20,5 @@ test('it renders', function(assert) { {{/x-foo}} `); - assert.equal(this.$().text().trim(), 'template block text'); + assert.equal(this.element.text().trim(), 'template block text'); }); diff --git a/node-tests/fixtures/component-test/mocha-unit.ts b/node-tests/fixtures/component-test/mocha-unit.ts index b5aeb40d..90d4585c 100644 --- a/node-tests/fixtures/component-test/mocha-unit.ts +++ b/node-tests/fixtures/component-test/mocha-unit.ts @@ -14,7 +14,7 @@ describeComponent('x-foo', 'Unit | Component | x-foo', // renders the component on the page this.render(); expect(component).to.be.ok; - expect(this.$()).to.have.length(1); + expect(this.element).to.not.be.null; }); } ); diff --git a/node-tests/fixtures/component-test/mocha.ts b/node-tests/fixtures/component-test/mocha.ts index 65c1680d..65c6a517 100644 --- a/node-tests/fixtures/component-test/mocha.ts +++ b/node-tests/fixtures/component-test/mocha.ts @@ -18,7 +18,7 @@ describeComponent('x-foo', 'Integration | Component | x-foo', // `); this.render(hbs`{{x-foo}}`); - expect(this.$()).to.have.length(1); + expect(this.element).to.not.be.null; }); } ); diff --git a/node-tests/fixtures/component-test/unit.ts b/node-tests/fixtures/component-test/unit.ts index 74bc9dcb..72da5498 100644 --- a/node-tests/fixtures/component-test/unit.ts +++ b/node-tests/fixtures/component-test/unit.ts @@ -12,5 +12,5 @@ test('it renders', function(assert) { /*let component =*/ this.subject(); // Renders the component to the page this.render(); - assert.equal(this.$().text().trim(), ''); + assert.equal(this.element.text().trim(), ''); }); diff --git a/node-tests/fixtures/helper-test/mocha.ts b/node-tests/fixtures/helper-test/mocha.ts index feca3336..c9a15ff2 100644 --- a/node-tests/fixtures/helper-test/mocha.ts +++ b/node-tests/fixtures/helper-test/mocha.ts @@ -21,6 +21,6 @@ describe('Integration | Helper | foo/bar-baz', function() { this.render(hbs`{{foo/bar-baz inputValue}}`); - expect(this.$().text().trim()).to.equal('1234'); + expect(this.element.text().trim()).to.equal('1234'); }); }); From 5123288e38a326df5e2597ab2ef6e9dcc21b8e63 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 17 Nov 2020 16:00:27 +0000 Subject: [PATCH 17/32] use ember-cli-htmlbars for testing this addon --- node-tests/fixtures/component-test/default-template.ts | 2 +- node-tests/fixtures/component-test/default.ts | 2 +- node-tests/fixtures/component-test/mocha.ts | 2 +- node-tests/fixtures/helper-test/integration.ts | 2 +- node-tests/fixtures/helper-test/mocha.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/node-tests/fixtures/component-test/default-template.ts b/node-tests/fixtures/component-test/default-template.ts index 65f05b63..82395716 100644 --- a/node-tests/fixtures/component-test/default-template.ts +++ b/node-tests/fixtures/component-test/default-template.ts @@ -1,5 +1,5 @@ import { moduleForComponent, test } from 'ember-qunit'; -import hbs from 'htmlbars-inline-precompile'; +import { hbs } from 'ember-cli-htmlbars'; moduleForComponent('<%= path =%><%= component =%>', 'Integration | Component | <%= component =%>', { integration: true diff --git a/node-tests/fixtures/component-test/default.ts b/node-tests/fixtures/component-test/default.ts index 5314cf21..ff8755e8 100644 --- a/node-tests/fixtures/component-test/default.ts +++ b/node-tests/fixtures/component-test/default.ts @@ -1,5 +1,5 @@ import { moduleForComponent, test } from 'ember-qunit'; -import hbs from 'htmlbars-inline-precompile'; +import { hbs } from 'ember-cli-htmlbars'; moduleForComponent('x-foo', 'Integration | Component | x-foo', { integration: true diff --git a/node-tests/fixtures/component-test/mocha.ts b/node-tests/fixtures/component-test/mocha.ts index 65c6a517..1fb1742c 100644 --- a/node-tests/fixtures/component-test/mocha.ts +++ b/node-tests/fixtures/component-test/mocha.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import { describeComponent, it } from 'ember-mocha'; -import hbs from 'htmlbars-inline-precompile'; +import { hbs } from 'ember-cli-htmlbars'; describeComponent('x-foo', 'Integration | Component | x-foo', { diff --git a/node-tests/fixtures/helper-test/integration.ts b/node-tests/fixtures/helper-test/integration.ts index 8ce8201b..f9b2db03 100644 --- a/node-tests/fixtures/helper-test/integration.ts +++ b/node-tests/fixtures/helper-test/integration.ts @@ -1,7 +1,7 @@ import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; +import { hbs } from 'ember-cli-htmlbars'; module('Integration | Helper | foo/bar-baz', function(hooks) { setupRenderingTest(hooks); diff --git a/node-tests/fixtures/helper-test/mocha.ts b/node-tests/fixtures/helper-test/mocha.ts index c9a15ff2..ec2202a1 100644 --- a/node-tests/fixtures/helper-test/mocha.ts +++ b/node-tests/fixtures/helper-test/mocha.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { describe, it } from 'mocha'; import { setupComponentTest } from 'ember-mocha'; -import hbs from 'htmlbars-inline-precompile'; +import { hbs } from 'ember-cli-htmlbars'; describe('Integration | Helper | foo/bar-baz', function() { setupComponentTest('foo/bar-baz', { From 83bbd0051b6e2c42775344842e3092a4e6e9afc0 Mon Sep 17 00:00:00 2001 From: Bryan Date: Tue, 17 Nov 2020 16:01:59 +0000 Subject: [PATCH 18/32] Update node-tests/fixtures/component/component-nested.ts Co-authored-by: Chris Krycho --- node-tests/fixtures/component/component-nested.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/node-tests/fixtures/component/component-nested.ts b/node-tests/fixtures/component/component-nested.ts index e863276d..760840ce 100644 --- a/node-tests/fixtures/component/component-nested.ts +++ b/node-tests/fixtures/component/component-nested.ts @@ -1,7 +1,4 @@ import Component from '@ember/component'; -export default class FooXFoo extends Component.extend({ - // anything which *must* be merged to prototype here -}) { - // normal class body definition here -}; +export default class FooXFoo extends Component { +} From e59a57f3ef5690cc8bd89f75ba15803a26ec125d Mon Sep 17 00:00:00 2001 From: Bryan Date: Tue, 17 Nov 2020 16:02:15 +0000 Subject: [PATCH 19/32] Update node-tests/fixtures/component/component.ts Co-authored-by: Chris Krycho --- node-tests/fixtures/component/component.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/node-tests/fixtures/component/component.ts b/node-tests/fixtures/component/component.ts index 7114a8ca..9ffdf650 100644 --- a/node-tests/fixtures/component/component.ts +++ b/node-tests/fixtures/component/component.ts @@ -1,7 +1,4 @@ import Component from '@ember/component'; -export default class Foo extends Component.extend({ - // anything which *must* be merged to prototype here -}) { - // normal class body definition here +export default class Foo extends Component { }; From f4c3748bd008e4cb4cd10a215fb0cd68198b1e99 Mon Sep 17 00:00:00 2001 From: Bryan Date: Tue, 17 Nov 2020 16:02:28 +0000 Subject: [PATCH 20/32] Update node-tests/fixtures/component/component-addon.ts Co-authored-by: Chris Krycho --- node-tests/fixtures/component/component-addon.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/node-tests/fixtures/component/component-addon.ts b/node-tests/fixtures/component/component-addon.ts index c71a1f43..8cc7412f 100644 --- a/node-tests/fixtures/component/component-addon.ts +++ b/node-tests/fixtures/component/component-addon.ts @@ -2,9 +2,6 @@ import Component from '@ember/component'; // @ts-ignore: Ignore import of compiled template import layout from '../templates/components/foo'; -export default class Foo extends Component.extend({ - // anything which *must* be merged to prototype here -}) { +export default class Foo extends Component { layout = layout; - // normal class body definition here -}; +} From cead5d855bfec74d03c64c539b63b917a9d831b8 Mon Sep 17 00:00:00 2001 From: Bryan Date: Tue, 17 Nov 2020 16:02:56 +0000 Subject: [PATCH 21/32] Update node-tests/fixtures/component/component-addon-nested.ts Co-authored-by: Chris Krycho --- node-tests/fixtures/component/component-addon-nested.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/node-tests/fixtures/component/component-addon-nested.ts b/node-tests/fixtures/component/component-addon-nested.ts index e76a76b7..b8d2c8a9 100644 --- a/node-tests/fixtures/component/component-addon-nested.ts +++ b/node-tests/fixtures/component/component-addon-nested.ts @@ -2,9 +2,6 @@ import Component from '@ember/component'; // @ts-ignore: Ignore import of compiled template import layout from '../../templates/components/foo/x-foo'; -export default class FooXFoo extends Component.extend({ - // anything which *must* be merged to prototype here -}) { +export default class FooXFoo extends Component { layout = layout; - // normal class body definition here -}; +} From cf0761b1a2004b120a157c804d4f291bb0c0d8b6 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 17 Nov 2020 18:48:54 +0000 Subject: [PATCH 22/32] clean up fixtures --- blueprints/component-test/index.js | 30 +---- .../__testType__/__path__/__test__.ts | 70 +++++----- blueprints/component/index.js | 5 +- node-tests/blueprints/component-test-test.js | 120 ++---------------- node-tests/blueprints/component-test.js | 10 +- .../component-test/default-template.ts | 24 ---- node-tests/fixtures/component-test/default.ts | 24 ---- .../fixtures/component-test/qunit-unit.ts | 11 ++ node-tests/fixtures/component-test/qunit.ts | 26 ++++ node-tests/fixtures/component-test/unit.ts | 16 --- .../component/component-addon-dash-pod.ts | 8 ++ .../component/component-addon-dash.ts | 7 + .../fixtures/component/component-dash.ts | 4 + .../component/glimmer-component-dash.ts | 7 + 14 files changed, 123 insertions(+), 239 deletions(-) delete mode 100644 node-tests/fixtures/component-test/default-template.ts delete mode 100644 node-tests/fixtures/component-test/default.ts create mode 100644 node-tests/fixtures/component-test/qunit-unit.ts create mode 100644 node-tests/fixtures/component-test/qunit.ts delete mode 100644 node-tests/fixtures/component-test/unit.ts create mode 100644 node-tests/fixtures/component/component-addon-dash-pod.ts create mode 100644 node-tests/fixtures/component/component-addon-dash.ts create mode 100644 node-tests/fixtures/component/component-dash.ts create mode 100644 node-tests/fixtures/component/glimmer-component-dash.ts diff --git a/blueprints/component-test/index.js b/blueprints/component-test/index.js index c32ef623..4a2dd406 100644 --- a/blueprints/component-test/index.js +++ b/blueprints/component-test/index.js @@ -62,10 +62,6 @@ module.exports = useTestFrameworkDetector({ componentPathName = [options.path, dasherizedModuleName].filter(Boolean).join('/'); } - let hbsImportStatement = this._useNamedHbsImport() - ? "import { hbs } from 'ember-cli-htmlbars';" - : "import hbs from 'htmlbars-inline-precompile';"; - let templateInvocation = invocationFor(options); let componentName = templateInvocation; let openComponent = (descriptor) => `<${descriptor}>`; @@ -82,30 +78,6 @@ module.exports = useTestFrameworkDetector({ closeComponent, selfCloseComponent, friendlyTestDescription, - hbsImportStatement, }; - }, - - _useNamedHbsImport() { - let htmlbarsAddon = this.project.addons.find((a) => a.name === 'ember-cli-htmlbars'); - - if (htmlbarsAddon && semver.gte(htmlbarsAddon.pkg.version, '4.0.0-alpha.1')) { - return true; - } - - return false; - }, - - afterInstall: function (options) { - if ( - !options.dryRun && - options.testType === 'integration' && - !this._useNamedHbsImport() && - isPackageMissing(this, 'ember-cli-htmlbars-inline-precompile') - ) { - return this.addPackagesToProject([ - { name: 'ember-cli-htmlbars-inline-precompile', target: '^0.3.1' }, - ]); - } - }, + } }); \ No newline at end of file diff --git a/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts index c6a76617..faf167f1 100644 --- a/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts @@ -1,36 +1,40 @@ -import { moduleForComponent, test } from 'ember-qunit';<% if (testType === 'integration') { %> - import hbs from 'htmlbars-inline-precompile';<% } %> - import { TestContext } from 'ember-test-helpers'; - - type Context = TestContext & { - // add your test properties here - } - - moduleForComponent('<%= componentPathName %>', '<%= friendlyTestDescription %>', { - <% if (testType === 'integration' ) { %>integration: true<% } else if(testType === 'unit') { %>// Specify the other units that are required for this test - // needs: ['component:foo', 'helper:bar'], - unit: true<% } %> - }); - - test('it renders', function(this: Context, assert: Assert) { - <% if (testType === 'integration' ) { %>// Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - this.render(hbs`<%= selfCloseComponent(componentName) %>`); - - assert.equal(this.element.text().trim(), ''); - +<% if (testType == 'integration') { %> +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | <%= dasherizedModuleName %>', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs`<<%= templateInvocation %> />`); + + assert.equal(this.element.textContent.trim(), ''); + // Template block usage: - this.render(hbs` - <%= openComponent(componentName) %> + await render(hbs` + <<%= templateInvocation %>> template block text - <%= closeComponent(componentName) %> + > `); - - assert.equal(this.element.text().trim(), 'template block text');<% } else if(testType === 'unit') { %> - // Creates the component instance - /*let component =*/ this.subject(); - // Renders the component to the page - this.render(); - assert.equal(this.element.text().trim(), '');<% } %> - }); \ No newline at end of file + + assert.equal(this.element.textContent.trim(), 'template block text'); + }); +}); +<% } else if (testType == 'unit') { %> +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Component | <%= dasherizedModuleName %>', function(hooks) { + setupTest(hooks); + + test('it exists', function(assert) { + let component = this.owner.factoryFor('component:<%= dasherizedModuleName %>').create(); + assert.ok(component); + }); +}); +<% } > \ No newline at end of file diff --git a/blueprints/component/index.js b/blueprints/component/index.js index 7d52375f..9f06bfdd 100644 --- a/blueprints/component/index.js +++ b/blueprints/component/index.js @@ -63,6 +63,8 @@ module.exports = { let importTemplate = ''; let contents = ''; + let classifiedModuleName = stringUtil.dasherize(options.entity.name); + // if we're in an addon, build import statement if (options.project.isEmberCLIAddon() || (options.inRepoAddon && !options.inDummy)) { if (options.pod) { @@ -71,7 +73,7 @@ module.exports = { templatePath = pathUtil.getRelativeParentPath(options.entity.name) + 'templates/components/' + - stringUtil.dasherize(options.entity.name); + classifiedModuleName; } importTemplate = '// @ts-ignore: Ignore import of compiled template' + EOL + 'import layout from \'' + templatePath + '\';' + EOL; contents = EOL + ' layout = layout;'; @@ -81,6 +83,7 @@ module.exports = { importTemplate: importTemplate, contents: contents, path: getPathOption(options), + classifiedModuleName }; }, }; diff --git a/node-tests/blueprints/component-test-test.js b/node-tests/blueprints/component-test-test.js index c8ed3e48..f23a3e22 100644 --- a/node-tests/blueprints/component-test-test.js +++ b/node-tests/blueprints/component-test-test.js @@ -22,49 +22,7 @@ describe('Blueprint: component-test', function() { return emberNew(); }); - describe('with ember-cli-qunit@4.1.0', function() { - beforeEach(function() { - generateFakePackageManifest('ember-cli-qunit', '4.1.0'); - }); - - it('component-test x-foo', function() { - return emberGenerateDestroy(['component-test', 'x-foo'], _file => { - expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/default.ts') - ); - }); - }); - - it('component-test x-foo --unit', function() { - return emberGenerateDestroy(['component-test', 'x-foo', '--unit'], _file => { - expect(_file('tests/unit/components/x-foo-test.ts')).to.equal( - fixture('component-test/unit.ts') - ); - }); - }); - - describe('with usePods=true', function() { - beforeEach(function() { - fs.writeFileSync( - '.ember-cli', - `{ - "disableAnalytics": false, - "usePods": true - }` - ); - }); - - it('component-test x-foo', function() { - return emberGenerateDestroy(['component-test', 'x-foo'], _file => { - expect(_file('tests/integration/components/x-foo/component-test.ts')).to.equal( - fixture('component-test/default.ts') - ); - }); - }); - }); - }); - - describe('with ember-cli-qunit@4.2.0', function() { + describe('with ember-cli-qunit@4.6.0', function() { beforeEach(function() { generateFakePackageManifest('ember-cli-qunit', '4.2.0'); }); @@ -72,7 +30,7 @@ describe('Blueprint: component-test', function() { it('component-test x-foo', function() { return emberGenerateDestroy(['component-test', 'x-foo'], _file => { expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/rfc232.ts') + fixture('component-test/qunit.ts') ); }); }); @@ -80,19 +38,19 @@ describe('Blueprint: component-test', function() { it('component-test x-foo --unit', function() { return emberGenerateDestroy(['component-test', 'x-foo', '--unit'], _file => { expect(_file('tests/unit/components/x-foo-test.ts')).to.equal( - fixture('component-test/rfc232-unit.ts') + fixture('component-test/qunit-unit.ts') ); }); }); }); - describe('with ember-cli-mocha@0.11.0', function() { + describe('with ember-mocha@0.16.0', function() { beforeEach(function() { modifyPackages([ { name: 'ember-cli-qunit', delete: true }, - { name: 'ember-cli-mocha', dev: true }, + { name: 'ember-mocha', dev: true }, ]); - generateFakePackageManifest('ember-cli-mocha', '0.11.0'); + generateFakePackageManifest('ember-mocha', '0.16.0'); }); it('component-test x-foo', function() { @@ -111,71 +69,19 @@ describe('Blueprint: component-test', function() { }); }); }); - - describe('with ember-cli-mocha@0.12.0', function() { - beforeEach(function() { - modifyPackages([ - { name: 'ember-cli-qunit', delete: true }, - { name: 'ember-cli-mocha', dev: true }, - ]); - generateFakePackageManifest('ember-cli-mocha', '0.12.0'); - }); - - it('component-test x-foo', function() { - return emberGenerateDestroy(['component-test', 'x-foo'], _file => { - expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/mocha-0.12.ts') - ); - }); - }); - - it('component-test x-foo --unit', function() { - return emberGenerateDestroy(['component-test', 'x-foo', '--unit'], _file => { - expect(_file('tests/unit/components/x-foo-test.ts')).to.equal( - fixture('component-test/mocha-0.12-unit.ts') - ); - }); - }); - }); - - describe('with ember-mocha@0.14.0', function() { - beforeEach(function() { - modifyPackages([ - { name: 'ember-cli-qunit', delete: true }, - { name: 'ember-mocha', dev: true }, - ]); - generateFakePackageManifest('ember-mocha', '0.14.0'); - }); - - it('component-test x-foo', function() { - return emberGenerateDestroy(['component-test', 'x-foo'], _file => { - expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/mocha-rfc232.ts') - ); - }); - }); - - it('component-test x-foo --unit', function() { - return emberGenerateDestroy(['component-test', 'x-foo', '--unit'], _file => { - expect(_file('tests/unit/components/x-foo-test.ts')).to.equal( - fixture('component-test/mocha-rfc232-unit.ts') - ); - }); - }); - }); }); describe('in addon', function() { beforeEach(function() { return emberNew({ target: 'addon' }).then(() => - generateFakePackageManifest('ember-cli-qunit', '4.1.0') + generateFakePackageManifest('ember-qunit', '4.6.0') ); }); it('component-test x-foo', function() { return emberGenerateDestroy(['component-test', 'x-foo'], _file => { expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/default.ts') + fixture('component-test/qunit.ts') ); expect(_file('app/component-test/x-foo.ts')).to.not.exist; @@ -185,7 +91,7 @@ describe('Blueprint: component-test', function() { it('component-test x-foo --unit', function() { return emberGenerateDestroy(['component-test', 'x-foo', '--unit'], _file => { expect(_file('tests/unit/components/x-foo-test.ts')).to.equal( - fixture('component-test/unit.ts') + fixture('component-test/qunit-unit.ts') ); expect(_file('app/component-test/x-foo.ts')).to.not.exist; @@ -195,7 +101,7 @@ describe('Blueprint: component-test', function() { it('component-test x-foo --dummy', function() { return emberGenerateDestroy(['component-test', 'x-foo', '--dummy'], _file => { expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/default.ts') + fixture('component-test/qunit.ts') ); expect(_file('app/component-test/x-foo.ts')).to.not.exist; @@ -206,7 +112,7 @@ describe('Blueprint: component-test', function() { describe('in in-repo-addon', function() { beforeEach(function() { return emberNew({ target: 'in-repo-addon' }).then(() => - generateFakePackageManifest('ember-cli-qunit', '4.1.0') + generateFakePackageManifest('ember-qunit', '4.6.0') ); }); @@ -215,7 +121,7 @@ describe('Blueprint: component-test', function() { ['component-test', 'x-foo', '--in-repo-addon=my-addon'], _file => { expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/default.ts') + fixture('component-test/qunit.ts') ); } ); @@ -226,7 +132,7 @@ describe('Blueprint: component-test', function() { ['component-test', 'x-foo', '--in-repo-addon=my-addon', '--unit'], _file => { expect(_file('tests/unit/components/x-foo-test.ts')).to.equal( - fixture('component-test/unit.ts') + fixture('component-test/qunit-unit.ts') ); } ); diff --git a/node-tests/blueprints/component-test.js b/node-tests/blueprints/component-test.js index b08fc47f..0723573c 100644 --- a/node-tests/blueprints/component-test.js +++ b/node-tests/blueprints/component-test.js @@ -20,7 +20,7 @@ describe('Blueprint: component', function() { describe('classic ember component', function() { describe('in app', function() { beforeEach(function() { - return emberNew().then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + return emberNew().then(() => generateFakePackageManifest('ember-qunit', '4.6.0')); }); it('component foo', function() { @@ -424,8 +424,8 @@ describe('Blueprint: component', function() { { name: '@glimmer/component', dev: true }, ]) }) - .then(() => generateFakePackageManifest('@glimmer/component', '^0.14.0-alpha.9')) - .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + .then(() => generateFakePackageManifest('@glimmer/component', '^0.16')) + .then(() => generateFakePackageManifest('ember-qunit', '4.6.0')); }); it('component foo', function() { @@ -823,7 +823,7 @@ describe('Blueprint: component', function() { describe('in addon', function() { beforeEach(function() { return emberNew({ target: 'addon' }).then(() => - generateFakePackageManifest('ember-cli-qunit', '4.1.0') + generateFakePackageManifest('ember-qunit', '4.6.0') ); }); @@ -945,7 +945,7 @@ describe('Blueprint: component', function() { describe('in in-repo-addon', function() { beforeEach(function() { return emberNew({ target: 'in-repo-addon' }).then(() => - generateFakePackageManifest('ember-cli-qunit', '4.1.0') + generateFakePackageManifest('ember-qunit', '4.6.0') ); }); diff --git a/node-tests/fixtures/component-test/default-template.ts b/node-tests/fixtures/component-test/default-template.ts deleted file mode 100644 index 82395716..00000000 --- a/node-tests/fixtures/component-test/default-template.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { moduleForComponent, test } from 'ember-qunit'; -import { hbs } from 'ember-cli-htmlbars'; - -moduleForComponent('<%= path =%><%= component =%>', 'Integration | Component | <%= component =%>', { - integration: true -}); - -test('it renders', function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - this.render(hbs`{{<%= path =%><%= component =%>}}`); - - assert.equal(this.element.text().trim(), ''); - - // Template block usage: - this.render(hbs` - {{#<%= path =%><%= component =%>}} - template block text - {{/<%= path =%><%= component =%>}} - `); - - assert.equal(this.element.text().trim(), 'template block text'); -}); diff --git a/node-tests/fixtures/component-test/default.ts b/node-tests/fixtures/component-test/default.ts deleted file mode 100644 index ff8755e8..00000000 --- a/node-tests/fixtures/component-test/default.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { moduleForComponent, test } from 'ember-qunit'; -import { hbs } from 'ember-cli-htmlbars'; - -moduleForComponent('x-foo', 'Integration | Component | x-foo', { - integration: true -}); - -test('it renders', function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - this.render(hbs`{{x-foo}}`); - - assert.equal(this.element.text().trim(), ''); - - // Template block usage: - this.render(hbs` - {{#x-foo}} - template block text - {{/x-foo}} - `); - - assert.equal(this.element.text().trim(), 'template block text'); -}); diff --git a/node-tests/fixtures/component-test/qunit-unit.ts b/node-tests/fixtures/component-test/qunit-unit.ts new file mode 100644 index 00000000..8aa16873 --- /dev/null +++ b/node-tests/fixtures/component-test/qunit-unit.ts @@ -0,0 +1,11 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Component | x-foo', function(hooks) { + setupTest(hooks); + + test('it exists', function(assert) { + let component = this.owner.factoryFor('component:x-foo').create(); + assert.ok(component); + }); +}); diff --git a/node-tests/fixtures/component-test/qunit.ts b/node-tests/fixtures/component-test/qunit.ts new file mode 100644 index 00000000..dbebc793 --- /dev/null +++ b/node-tests/fixtures/component-test/qunit.ts @@ -0,0 +1,26 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | x-foo', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + + template block text + + `); + + assert.equal(this.element.textContent.trim(), 'template block text'); + }); +}); diff --git a/node-tests/fixtures/component-test/unit.ts b/node-tests/fixtures/component-test/unit.ts deleted file mode 100644 index 72da5498..00000000 --- a/node-tests/fixtures/component-test/unit.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { moduleForComponent, test } from 'ember-qunit'; - -moduleForComponent('x-foo', 'Unit | Component | x-foo', { - // Specify the other units that are required for this test - // needs: ['component:foo', 'helper:bar'], - unit: true -}); - -test('it renders', function(assert) { - - // Creates the component instance - /*let component =*/ this.subject(); - // Renders the component to the page - this.render(); - assert.equal(this.element.text().trim(), ''); -}); diff --git a/node-tests/fixtures/component/component-addon-dash-pod.ts b/node-tests/fixtures/component/component-addon-dash-pod.ts new file mode 100644 index 00000000..41a49ce1 --- /dev/null +++ b/node-tests/fixtures/component/component-addon-dash-pod.ts @@ -0,0 +1,8 @@ +import Component from '@ember/component'; +// @ts-ignore: Ignore import of compiled template +import layout from './template'; + +export default class XFoo extends Component { +}) { + layout = layout; +}; diff --git a/node-tests/fixtures/component/component-addon-dash.ts b/node-tests/fixtures/component/component-addon-dash.ts new file mode 100644 index 00000000..7fd9a3b5 --- /dev/null +++ b/node-tests/fixtures/component/component-addon-dash.ts @@ -0,0 +1,7 @@ +import Component from '@ember/component'; +// @ts-ignore: Ignore import of compiled template +import layout from '../templates/components/x-foo'; + +export default class XFoo extends Component { + layout = layout; +}; diff --git a/node-tests/fixtures/component/component-dash.ts b/node-tests/fixtures/component/component-dash.ts new file mode 100644 index 00000000..c978f988 --- /dev/null +++ b/node-tests/fixtures/component/component-dash.ts @@ -0,0 +1,4 @@ +import Component from '@ember/component'; + +export default class XFoo extends Component { +} diff --git a/node-tests/fixtures/component/glimmer-component-dash.ts b/node-tests/fixtures/component/glimmer-component-dash.ts new file mode 100644 index 00000000..312a6b5f --- /dev/null +++ b/node-tests/fixtures/component/glimmer-component-dash.ts @@ -0,0 +1,7 @@ +import Component from '@glimmer/component'; + +interface XFooArgs {} + +export default class XFoo extends Component { + +} From 5682b8c1be66cf00c354f79d3da286701ffa545a Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 17 Nov 2020 18:54:39 +0000 Subject: [PATCH 23/32] fix linting and clean packages --- blueprints/component-test/index.js | 2 -- node-tests/blueprints/component-test-test.js | 2 -- node-tests/blueprints/component-test.js | 1 - package.json | 2 -- 4 files changed, 7 deletions(-) diff --git a/blueprints/component-test/index.js b/blueprints/component-test/index.js index 4a2dd406..dbd546ef 100644 --- a/blueprints/component-test/index.js +++ b/blueprints/component-test/index.js @@ -2,9 +2,7 @@ const path = require('path'); const stringUtil = require('ember-cli-string-utils'); -const isPackageMissing = require('ember-cli-is-package-missing'); const getPathOption = require('ember-cli-get-component-path-option'); -const semver = require('semver'); const useTestFrameworkDetector = require('../test-framework-detector'); diff --git a/node-tests/blueprints/component-test-test.js b/node-tests/blueprints/component-test-test.js index f23a3e22..c4240898 100644 --- a/node-tests/blueprints/component-test-test.js +++ b/node-tests/blueprints/component-test-test.js @@ -1,7 +1,5 @@ 'use strict'; -const fs = require('fs-extra'); - const blueprintHelpers = require('ember-cli-blueprint-test-helpers/helpers'); const setupTestHooks = blueprintHelpers.setupTestHooks; const emberNew = blueprintHelpers.emberNew; diff --git a/node-tests/blueprints/component-test.js b/node-tests/blueprints/component-test.js index 0723573c..714beee3 100644 --- a/node-tests/blueprints/component-test.js +++ b/node-tests/blueprints/component-test.js @@ -16,7 +16,6 @@ const fixture = require('../helpers/fixture'); describe('Blueprint: component', function() { setupTestHooks(this); - describe('classic ember component', function() { describe('in app', function() { beforeEach(function() { diff --git a/package.json b/package.json index 5f97b1a4..c30a8f5c 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "chalk": "^4.0.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", "ember-cli-path-utils": "^1.0.0", "ember-cli-string-utils": "^1.1.0", @@ -33,7 +32,6 @@ "exists-sync": "^0.1.0", "fs-extra": "^8.0.0", "inflection": "^1.12.0", - "semver": "^7.3.2", "silent-error": "^1.1.0" }, "devDependencies": { From 75693130ad0f6a6bead6fbca45e9deaa07c6bfa5 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 24 Nov 2020 02:07:37 +0000 Subject: [PATCH 24/32] remove unit tests for components --- .../__testType__/__path__/__test__.ts | 51 ++++++++----------- .../__testType__/__path__/__test__.ts | 14 ----- 2 files changed, 22 insertions(+), 43 deletions(-) diff --git a/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts index 0581af28..e2b6cd3f 100644 --- a/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.ts @@ -1,34 +1,27 @@ import { expect } from 'chai'; -import { describeComponent, it } from 'ember-mocha';<% if (testType === 'integration') { %> -import hbs from 'htmlbars-inline-precompile';<% } %> +import { describe, it } from 'mocha'; +import { setupRenderingTest } from 'ember-mocha'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; -describeComponent('<%= componentPathName %>', '<%= friendlyTestDescription %>', - { - <% if (testType === 'integration' ) { %>integration: true<% } else if(testType === 'unit') { %>// Specify the other units that are required for this test - // needs: ['component:foo', 'helper:bar'], - unit: true<% } %> - }, - function() { - it('renders', function() { - <% if (testType === 'integration' ) { %>// Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); +describe('<%= friendlyTestDescription %>', function() { + setupRenderingTest(); - this.render(hbs`<%= selfCloseComponent(componentName) %>`); - expect(this.element).to.not.be.null; + it('renders', async function() { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); - // Template block usage: - this.render(hbs` - <%= openComponent(componentName) %> - template block text - <%= closeComponent(componentName) %> - `); + await render(hbs`<%= selfCloseComponent(componentName) %>`); - expect(this.element.text().trim()).to.equal('template block text');<% } else if(testType === 'unit') { %>// creates the component instance - let component = this.subject(); - // renders the component on the page - this.render(); - expect(component).to.be.ok; - expect(this.element).to.not.be.null;<% } %> - }); - } -); \ No newline at end of file + expect(this.element.textContent.trim()).to.equal(''); + + // Template block usage: + await render(hbs` + <%= openComponent(componentName) %> + template block text + <%= closeComponent(componentName) %> + `); + + expect(this.element.textContent.trim()).to.equal('template block text'); + }); +}); \ No newline at end of file diff --git a/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts b/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts index faf167f1..6fd18705 100644 --- a/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts +++ b/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.ts @@ -1,4 +1,3 @@ -<% if (testType == 'integration') { %> import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { render } from '@ember/test-helpers'; @@ -25,16 +24,3 @@ module('Integration | Component | <%= dasherizedModuleName %>', function(hooks) assert.equal(this.element.textContent.trim(), 'template block text'); }); }); -<% } else if (testType == 'unit') { %> -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Component | <%= dasherizedModuleName %>', function(hooks) { - setupTest(hooks); - - test('it exists', function(assert) { - let component = this.owner.factoryFor('component:<%= dasherizedModuleName %>').create(); - assert.ok(component); - }); -}); -<% } > \ No newline at end of file From 38ee3cd4a2e8e4a27a0fe30b08e649a2f66a95c6 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 24 Nov 2020 02:14:37 +0000 Subject: [PATCH 25/32] update fixtures to remove unit tests --- .../fixtures/component-test/mocha-unit.ts | 20 --------- node-tests/fixtures/component-test/mocha.ts | 43 ++++++++++--------- .../fixtures/component-test/qunit-unit.ts | 11 ----- 3 files changed, 23 insertions(+), 51 deletions(-) delete mode 100644 node-tests/fixtures/component-test/mocha-unit.ts delete mode 100644 node-tests/fixtures/component-test/qunit-unit.ts diff --git a/node-tests/fixtures/component-test/mocha-unit.ts b/node-tests/fixtures/component-test/mocha-unit.ts deleted file mode 100644 index 90d4585c..00000000 --- a/node-tests/fixtures/component-test/mocha-unit.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { expect } from 'chai'; -import { describeComponent, it } from 'ember-mocha'; - -describeComponent('x-foo', 'Unit | Component | x-foo', - { - // Specify the other units that are required for this test - // needs: ['component:foo', 'helper:bar'], - unit: true - }, - function() { - it('renders', function() { - // creates the component instance - let component = this.subject(); - // renders the component on the page - this.render(); - expect(component).to.be.ok; - expect(this.element).to.not.be.null; - }); - } -); diff --git a/node-tests/fixtures/component-test/mocha.ts b/node-tests/fixtures/component-test/mocha.ts index 1fb1742c..87c62720 100644 --- a/node-tests/fixtures/component-test/mocha.ts +++ b/node-tests/fixtures/component-test/mocha.ts @@ -1,24 +1,27 @@ import { expect } from 'chai'; -import { describeComponent, it } from 'ember-mocha'; +import { describe, it } from 'mocha'; +import { setupRenderingTest } from 'ember-mocha'; +import { render } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; -describeComponent('x-foo', 'Integration | Component | x-foo', - { - integration: true - }, - function() { - it('renders', function() { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - // Template block usage: - // this.render(hbs` - // {{#x-foo}} - // template content - // {{/x-foo}} - // `); +describe('x-foo', 'Integration | Component | x-foo', function() { + setupRenderingTest(); - this.render(hbs`{{x-foo}}`); - expect(this.element).to.not.be.null; - }); - } -); + it('renders', async function() { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + expect(this.element.textContent.trim()).to.equal(''); + + // Template block usage: + await render(hbs` + + template block text + + `); + + expect(this.element.textContent.trim()).to.equal('template block text'); + }); +}); diff --git a/node-tests/fixtures/component-test/qunit-unit.ts b/node-tests/fixtures/component-test/qunit-unit.ts deleted file mode 100644 index 8aa16873..00000000 --- a/node-tests/fixtures/component-test/qunit-unit.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Component | x-foo', function(hooks) { - setupTest(hooks); - - test('it exists', function(assert) { - let component = this.owner.factoryFor('component:x-foo').create(); - assert.ok(component); - }); -}); From 5b262cd19380926bb0bfd3105dc542473f02668c Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 24 Nov 2020 02:16:42 +0000 Subject: [PATCH 26/32] remove tests for unit testing components --- node-tests/blueprints/component-test-test.js | 36 -------------------- 1 file changed, 36 deletions(-) diff --git a/node-tests/blueprints/component-test-test.js b/node-tests/blueprints/component-test-test.js index c4240898..dcfc7fac 100644 --- a/node-tests/blueprints/component-test-test.js +++ b/node-tests/blueprints/component-test-test.js @@ -33,13 +33,6 @@ describe('Blueprint: component-test', function() { }); }); - it('component-test x-foo --unit', function() { - return emberGenerateDestroy(['component-test', 'x-foo', '--unit'], _file => { - expect(_file('tests/unit/components/x-foo-test.ts')).to.equal( - fixture('component-test/qunit-unit.ts') - ); - }); - }); }); describe('with ember-mocha@0.16.0', function() { @@ -58,14 +51,6 @@ describe('Blueprint: component-test', function() { ); }); }); - - it('component-test x-foo --unit', function() { - return emberGenerateDestroy(['component-test', 'x-foo', '--unit'], _file => { - expect(_file('tests/unit/components/x-foo-test.ts')).to.equal( - fixture('component-test/mocha-unit.ts') - ); - }); - }); }); }); @@ -86,16 +71,6 @@ describe('Blueprint: component-test', function() { }); }); - it('component-test x-foo --unit', function() { - return emberGenerateDestroy(['component-test', 'x-foo', '--unit'], _file => { - expect(_file('tests/unit/components/x-foo-test.ts')).to.equal( - fixture('component-test/qunit-unit.ts') - ); - - expect(_file('app/component-test/x-foo.ts')).to.not.exist; - }); - }); - it('component-test x-foo --dummy', function() { return emberGenerateDestroy(['component-test', 'x-foo', '--dummy'], _file => { expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( @@ -124,16 +99,5 @@ describe('Blueprint: component-test', function() { } ); }); - - it('component-test x-foo --in-repo-addon=my-addon --unit', function() { - return emberGenerateDestroy( - ['component-test', 'x-foo', '--in-repo-addon=my-addon', '--unit'], - _file => { - expect(_file('tests/unit/components/x-foo-test.ts')).to.equal( - fixture('component-test/qunit-unit.ts') - ); - } - ); - }); }); }); From 4fe2936a332a88ab6e84bd77f6925d8532834351 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 24 Nov 2020 02:28:26 +0000 Subject: [PATCH 27/32] fix helper test import of hbs --- .../mocha-files/tests/__testType__/helpers/__name__-test.ts | 2 +- .../qunit-files/tests/__testType__/helpers/__name__-test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/blueprints/helper-test/mocha-files/tests/__testType__/helpers/__name__-test.ts b/blueprints/helper-test/mocha-files/tests/__testType__/helpers/__name__-test.ts index 5abc73b0..4088a058 100644 --- a/blueprints/helper-test/mocha-files/tests/__testType__/helpers/__name__-test.ts +++ b/blueprints/helper-test/mocha-files/tests/__testType__/helpers/__name__-test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; <% if (testType == 'integration') { %>import { describe, it } from 'mocha'; import { setupComponentTest } from 'ember-mocha'; -import hbs from 'htmlbars-inline-precompile'; +import { hbs } from 'ember-cli-htmlbars'; describe('<%= friendlyTestName %>', function() { setupComponentTest('<%= dasherizedModuleName %>', { diff --git a/blueprints/helper-test/qunit-files/tests/__testType__/helpers/__name__-test.ts b/blueprints/helper-test/qunit-files/tests/__testType__/helpers/__name__-test.ts index 28a173e3..d894396b 100644 --- a/blueprints/helper-test/qunit-files/tests/__testType__/helpers/__name__-test.ts +++ b/blueprints/helper-test/qunit-files/tests/__testType__/helpers/__name__-test.ts @@ -1,7 +1,7 @@ <% if (testType === 'integration') { %>import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; +import { hbs } from 'ember-cli-htmlbars'; module('<%= friendlyTestName %>', function(hooks) { setupRenderingTest(hooks); From 7f3d40c85364c9f8b4cb617990dbf553bd9cc068 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 24 Nov 2020 03:14:43 +0000 Subject: [PATCH 28/32] use correct component name in tests --- .../component/glimmer-files/__root__/__path__/__name__.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blueprints/component/glimmer-files/__root__/__path__/__name__.ts b/blueprints/component/glimmer-files/__root__/__path__/__name__.ts index 7e34baa2..d5b3ea97 100644 --- a/blueprints/component/glimmer-files/__root__/__path__/__name__.ts +++ b/blueprints/component/glimmer-files/__root__/__path__/__name__.ts @@ -1,7 +1,7 @@ import Component from '@glimmer/component'; -interface <%= classifiedModuleName %>Args { +interface <%= componentName %>Args { } -export default class <%= classifiedModuleName %> extends Component<<%= classifiedModuleName %>Args> { +export default class <%= componentName %> extends Component<<%= componentName %>Args> { }; \ No newline at end of file From d7c98e444db56fd4c323093cf3d9cad5b56b923d Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 24 Nov 2020 03:19:47 +0000 Subject: [PATCH 29/32] generate correct component name --- blueprints/component/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/blueprints/component/index.js b/blueprints/component/index.js index 9f06bfdd..5b36ee5f 100644 --- a/blueprints/component/index.js +++ b/blueprints/component/index.js @@ -7,6 +7,11 @@ const getPathOption = require('ember-cli-get-component-path-option'); const normalizeEntityName = require('ember-cli-normalize-entity-name'); const EOL = require('os').EOL; +function invocationFor(options) { + let parts = options.entity.name.split('/'); + return parts.map((p) => stringUtil.classify(p)).join('::'); +} + module.exports = { description: 'Generates a component.', @@ -65,6 +70,9 @@ module.exports = { let classifiedModuleName = stringUtil.dasherize(options.entity.name); + let templateInvocation = invocationFor(options); + let componentName = templateInvocation; + // if we're in an addon, build import statement if (options.project.isEmberCLIAddon() || (options.inRepoAddon && !options.inDummy)) { if (options.pod) { @@ -83,7 +91,8 @@ module.exports = { importTemplate: importTemplate, contents: contents, path: getPathOption(options), - classifiedModuleName + classifiedModuleName, + componentName }; }, }; From fd0febb77924465699d908f6957c0a5fad3b786f Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 24 Nov 2020 03:56:45 +0000 Subject: [PATCH 30/32] correct the component name creation --- blueprints/component/index.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/blueprints/component/index.js b/blueprints/component/index.js index 5b36ee5f..a2a618b9 100644 --- a/blueprints/component/index.js +++ b/blueprints/component/index.js @@ -7,9 +7,9 @@ const getPathOption = require('ember-cli-get-component-path-option'); const normalizeEntityName = require('ember-cli-normalize-entity-name'); const EOL = require('os').EOL; -function invocationFor(options) { +function componentNameFor(options) { let parts = options.entity.name.split('/'); - return parts.map((p) => stringUtil.classify(p)).join('::'); + return parts.map((p) => stringUtil.classify(p)).join(); } module.exports = { @@ -70,8 +70,7 @@ module.exports = { let classifiedModuleName = stringUtil.dasherize(options.entity.name); - let templateInvocation = invocationFor(options); - let componentName = templateInvocation; + let componentName = componentNameFor(options); // if we're in an addon, build import statement if (options.project.isEmberCLIAddon() || (options.inRepoAddon && !options.inDummy)) { From a878d30f644b50161a52871437a7bc5926db1deb Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 24 Nov 2020 04:03:09 +0000 Subject: [PATCH 31/32] fix component name generation --- blueprints/component/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/component/index.js b/blueprints/component/index.js index a2a618b9..6b81f8d2 100644 --- a/blueprints/component/index.js +++ b/blueprints/component/index.js @@ -9,7 +9,7 @@ const EOL = require('os').EOL; function componentNameFor(options) { let parts = options.entity.name.split('/'); - return parts.map((p) => stringUtil.classify(p)).join(); + return parts.map((p) => stringUtil.classify(p)).join(""); } module.exports = { From c0a09b9fccd8d6a12bd3369fce13ec35c1109709 Mon Sep 17 00:00:00 2001 From: Bryan Crotaz Date: Tue, 24 Nov 2020 16:57:51 +0000 Subject: [PATCH 32/32] bring in default blueprints from ember.js --- blueprints/-addon-import.js | 48 + .../files/__root__/__path__/__name__.js | 1 + blueprints/component-addon/index.js | 76 + .../__root__/__path__/__name__.js | 1 + .../files/__root__/__path__/__name__.js | 1 + blueprints/component-class-addon/index.js | 54 + .../__root__/__path__/__name__.js | 1 + .../files/__root__/__path__/__name__.js | 3 + blueprints/component-class/index.js | 175 ++ .../files/__root__/__path__/__name__.ts | 5 +- blueprints/edition-detector.js | 13 + node-tests/blueprints/component-addon-test.js | 34 + .../blueprints/component-class-addon-test.js | 34 + node-tests/blueprints/component-class-test.js | 730 ++++++++ node-tests/blueprints/component-test.js | 1594 ++++++++++------- .../component-test/default-template.ts | 24 + node-tests/fixtures/component-test/default.ts | 24 + .../component/component-addon-dash-pod.ts | 1 - node-tests/helpers/expect-error.js | 4 +- node-tests/helpers/fixture.js | 6 +- .../helpers/generate-fake-package-manifest.js | 36 +- node-tests/helpers/setup-test-environment.js | 15 + 22 files changed, 2203 insertions(+), 677 deletions(-) create mode 100644 blueprints/-addon-import.js create mode 100644 blueprints/component-addon/files/__root__/__path__/__name__.js create mode 100644 blueprints/component-addon/index.js create mode 100644 blueprints/component-addon/native-files/__root__/__path__/__name__.js create mode 100644 blueprints/component-class-addon/files/__root__/__path__/__name__.js create mode 100644 blueprints/component-class-addon/index.js create mode 100644 blueprints/component-class-addon/native-files/__root__/__path__/__name__.js create mode 100644 blueprints/component-class/files/__root__/__path__/__name__.js create mode 100644 blueprints/component-class/index.js create mode 100644 blueprints/edition-detector.js create mode 100644 node-tests/blueprints/component-addon-test.js create mode 100644 node-tests/blueprints/component-class-addon-test.js create mode 100644 node-tests/blueprints/component-class-test.js create mode 100644 node-tests/fixtures/component-test/default-template.ts create mode 100644 node-tests/fixtures/component-test/default.ts create mode 100644 node-tests/helpers/setup-test-environment.js diff --git a/blueprints/-addon-import.js b/blueprints/-addon-import.js new file mode 100644 index 00000000..27cf4f7f --- /dev/null +++ b/blueprints/-addon-import.js @@ -0,0 +1,48 @@ +'use strict'; + +const stringUtil = require('ember-cli-string-utils'); +const path = require('path'); +const inflector = require('inflection'); + +module.exports = { + description: 'Generates an import wrapper.', + + fileMapTokens: function () { + return { + __name__: function (options) { + return options.dasherizedModuleName; + }, + __path__: function (options) { + return inflector.pluralize(options.locals.blueprintName); + }, + __root__: function (options) { + if (options.inRepoAddon) { + return path.join('lib', options.inRepoAddon, 'app'); + } + return 'app'; + }, + }; + }, + + locals: function (options) { + let addonRawName = options.inRepoAddon ? options.inRepoAddon : options.project.name(); + let addonName = stringUtil.dasherize(addonRawName); + let fileName = stringUtil.dasherize(options.entity.name); + let blueprintName = options.originBlueprintName; + let modulePathSegments = [ + addonName, + inflector.pluralize(options.originBlueprintName), + fileName, + ]; + + if (blueprintName.match(/-addon/)) { + blueprintName = blueprintName.substr(0, blueprintName.indexOf('-addon')); + modulePathSegments = [addonName, inflector.pluralize(blueprintName), fileName]; + } + + return { + modulePath: modulePathSegments.join('/'), + blueprintName: blueprintName, + }; + }, +}; diff --git a/blueprints/component-addon/files/__root__/__path__/__name__.js b/blueprints/component-addon/files/__root__/__path__/__name__.js new file mode 100644 index 00000000..71a8b71c --- /dev/null +++ b/blueprints/component-addon/files/__root__/__path__/__name__.js @@ -0,0 +1 @@ +export { default } from '<%= modulePath %>'; \ No newline at end of file diff --git a/blueprints/component-addon/index.js b/blueprints/component-addon/index.js new file mode 100644 index 00000000..a3f30e40 --- /dev/null +++ b/blueprints/component-addon/index.js @@ -0,0 +1,76 @@ +'use strict'; + +const path = require('path'); +const stringUtil = require('ember-cli-string-utils'); +const getPathOption = require('ember-cli-get-component-path-option'); +const normalizeEntityName = require('ember-cli-normalize-entity-name'); +const useEditionDetector = require('../edition-detector'); + +module.exports = useEditionDetector({ + description: 'Generates a component.', + + fileMapTokens: function () { + return { + __path__: function (options) { + if (options.pod) { + return path.join(options.podPath, options.locals.path, options.dasherizedModuleName); + } + return 'components'; + }, + __name__: function (options) { + if (options.pod) { + return 'component'; + } + return options.dasherizedModuleName; + }, + __root__: function (options) { + if (options.inRepoAddon) { + return path.join('lib', options.inRepoAddon, 'app'); + } + return 'app'; + }, + __templatepath__: function (options) { + if (options.pod) { + return path.join(options.podPath, options.locals.path, options.dasherizedModuleName); + } + return 'templates/components'; + }, + __templatename__: function (options) { + if (options.pod) { + return 'template'; + } + return options.dasherizedModuleName; + }, + }; + }, + + normalizeEntityName: function (entityName) { + return normalizeEntityName(entityName); + }, + + locals: function (options) { + let addonRawName = options.inRepoAddon ? options.inRepoAddon : options.project.name(); + let addonName = stringUtil.dasherize(addonRawName); + let fileName = stringUtil.dasherize(options.entity.name); + let importPathName = [addonName, 'components', fileName].join('/'); + let templatePath = ''; + + if (options.pod) { + importPathName = [addonName, 'components', fileName, 'component'].join('/'); + } + + if (this.project.isEmberCLIAddon() || (options.inRepoAddon && !options.inDummy)) { + if (options.pod) { + templatePath = './template'; + } else { + templatePath = [addonName, 'templates/components', fileName].join('/'); + } + } + + return { + modulePath: importPathName, + templatePath, + path: getPathOption(options), + }; + }, +}); diff --git a/blueprints/component-addon/native-files/__root__/__path__/__name__.js b/blueprints/component-addon/native-files/__root__/__path__/__name__.js new file mode 100644 index 00000000..71a8b71c --- /dev/null +++ b/blueprints/component-addon/native-files/__root__/__path__/__name__.js @@ -0,0 +1 @@ +export { default } from '<%= modulePath %>'; \ No newline at end of file diff --git a/blueprints/component-class-addon/files/__root__/__path__/__name__.js b/blueprints/component-class-addon/files/__root__/__path__/__name__.js new file mode 100644 index 00000000..71a8b71c --- /dev/null +++ b/blueprints/component-class-addon/files/__root__/__path__/__name__.js @@ -0,0 +1 @@ +export { default } from '<%= modulePath %>'; \ No newline at end of file diff --git a/blueprints/component-class-addon/index.js b/blueprints/component-class-addon/index.js new file mode 100644 index 00000000..19272db5 --- /dev/null +++ b/blueprints/component-class-addon/index.js @@ -0,0 +1,54 @@ +'use strict'; + +const path = require('path'); +const stringUtil = require('ember-cli-string-utils'); +const getPathOption = require('ember-cli-get-component-path-option'); +const normalizeEntityName = require('ember-cli-normalize-entity-name'); +const useEditionDetector = require('../edition-detector'); + +module.exports = useEditionDetector({ + description: 'Generates a component class.', + + fileMapTokens: function () { + return { + __path__: function (options) { + if (options.pod) { + return path.join(options.podPath, options.locals.path, options.dasherizedModuleName); + } + return 'components'; + }, + __name__: function (options) { + if (options.pod) { + return 'component'; + } + return options.dasherizedModuleName; + }, + __root__: function (options) { + if (options.inRepoAddon) { + return path.join('lib', options.inRepoAddon, 'app'); + } + return 'app'; + }, + }; + }, + + normalizeEntityName: function (entityName) { + return normalizeEntityName(entityName); + }, + + locals: function (options) { + let addonRawName = options.inRepoAddon ? options.inRepoAddon : options.project.name(); + let addonName = stringUtil.dasherize(addonRawName); + let fileName = stringUtil.dasherize(options.entity.name); + let importPathName = [addonName, 'components', fileName].join('/'); + + if (options.pod) { + importPathName = [addonName, 'components', fileName, 'component'].join('/'); + } + + return { + modulePath: importPathName, + path: getPathOption(options), + }; + }, +}); diff --git a/blueprints/component-class-addon/native-files/__root__/__path__/__name__.js b/blueprints/component-class-addon/native-files/__root__/__path__/__name__.js new file mode 100644 index 00000000..71a8b71c --- /dev/null +++ b/blueprints/component-class-addon/native-files/__root__/__path__/__name__.js @@ -0,0 +1 @@ +export { default } from '<%= modulePath %>'; \ No newline at end of file diff --git a/blueprints/component-class/files/__root__/__path__/__name__.js b/blueprints/component-class/files/__root__/__path__/__name__.js new file mode 100644 index 00000000..777e6155 --- /dev/null +++ b/blueprints/component-class/files/__root__/__path__/__name__.js @@ -0,0 +1,3 @@ +<%= importComponent %> +<%= importTemplate %> +export default <%= defaultExport %> diff --git a/blueprints/component-class/index.js b/blueprints/component-class/index.js new file mode 100644 index 00000000..697d5b0b --- /dev/null +++ b/blueprints/component-class/index.js @@ -0,0 +1,175 @@ +'use strict'; + +const path = require('path'); +const SilentError = require('silent-error'); +const stringUtil = require('ember-cli-string-utils'); +const pathUtil = require('ember-cli-path-utils'); +const getPathOption = require('ember-cli-get-component-path-option'); +const normalizeEntityName = require('ember-cli-normalize-entity-name'); +const { EOL } = require('os'); +const { has } = require('@ember/edition-utils'); + +const OCTANE = has('octane'); + +// TODO: this should be reading from the @ember/canary-features module +// need to refactor broccoli/features.js to be able to work more similarly +// to https://github.com/emberjs/data/pull/6231 +const EMBER_GLIMMER_SET_COMPONENT_TEMPLATE = true; + +// intentionally avoiding use-edition-detector +module.exports = { + description: 'Generates a component class.', + + availableOptions: [ + { + name: 'path', + type: String, + default: 'components', + aliases: [{ 'no-path': '' }], + }, + { + name: 'component-class', + type: ['@ember/component', '@glimmer/component', '@ember/component/template-only'], + default: OCTANE ? '@glimmer/component' : '@ember/component', + aliases: [ + { cc: '@ember/component' }, + { gc: '@glimmer/component' }, + { tc: '@ember/component/template-only' }, + ], + }, + { + name: 'component-structure', + type: OCTANE ? ['flat', 'nested', 'classic'] : ['classic'], + default: OCTANE ? 'flat' : 'classic', + aliases: OCTANE ? [{ fs: 'flat' }, { ns: 'nested' }, { cs: 'classic' }] : [{ cs: 'classic' }], + }, + ], + + init() { + this._super && this._super.init.apply(this, arguments); + let isOctane = has('octane'); + + this.availableOptions.forEach((option) => { + if (option.name === 'component-class') { + if (isOctane) { + option.default = '@glimmer/component'; + } else { + option.default = '@ember/component'; + } + } else if (option.name === 'component-structure') { + if (isOctane) { + option.type = ['flat', 'nested', 'classic']; + option.default = 'flat'; + option.aliases = [{ fs: 'flat' }, { ns: 'nested' }, { cs: 'classic' }]; + } else { + option.type = ['classic']; + option.default = 'classic'; + option.aliases = [{ cs: 'classic' }]; + } + } + }); + + this.EMBER_GLIMMER_SET_COMPONENT_TEMPLATE = EMBER_GLIMMER_SET_COMPONENT_TEMPLATE || isOctane; + }, + + install() { + if (!this.EMBER_GLIMMER_SET_COMPONENT_TEMPLATE) { + throw new SilentError( + 'Usage of `ember generate component-class` is only available on canary' + ); + } + + return this._super.install.apply(this, arguments); + }, + + fileMapTokens(options) { + let commandOptions = this.options; + + if (commandOptions.pod) { + return { + __path__() { + return path.join(options.podPath, options.locals.path, options.dasherizedModuleName); + }, + __name__() { + return 'component'; + }, + }; + } else if ( + commandOptions.componentStructure === 'classic' || + commandOptions.componentStructure === 'flat' + ) { + return { + __path__() { + return 'components'; + }, + }; + } else if (commandOptions.componentStructure === 'nested') { + return { + __path__() { + return `components/${options.dasherizedModuleName}`; + }, + __name__() { + return 'index'; + }, + }; + } + }, + + normalizeEntityName(entityName) { + return normalizeEntityName( + entityName.replace(/\.js$/, '') //Prevent generation of ".js.js" files + ); + }, + + locals(options) { + let sanitizedModuleName = options.entity.name.replace(/\//g, '-'); + let classifiedModuleName = stringUtil.classify(sanitizedModuleName); + + let templatePath = ''; + let importComponent = ''; + let importTemplate = ''; + let defaultExport = ''; + + // if we're in an addon, build import statement + if (options.project.isEmberCLIAddon() || (options.inRepoAddon && !options.inDummy)) { + if (options.pod) { + templatePath = './template'; + } else { + templatePath = + pathUtil.getRelativeParentPath(options.entity.name) + + 'templates/components/' + + stringUtil.dasherize(options.entity.name); + } + } + + let componentClass = options.componentClass; + + switch (componentClass) { + case '@ember/component': + importComponent = `import Component from '@ember/component';`; + if (templatePath) { + importTemplate = `import layout from '${templatePath}';${EOL}`; + defaultExport = `Component.extend({${EOL} layout${EOL}});`; + } else { + defaultExport = `Component.extend({${EOL}});`; + } + break; + case '@glimmer/component': + importComponent = `import Component from '@glimmer/component';`; + defaultExport = `class ${classifiedModuleName}Component extends Component {\n}`; + break; + case '@ember/component/template-only': + importComponent = `import templateOnly from '@ember/component/template-only';`; + defaultExport = `templateOnly();`; + break; + } + + return { + importTemplate, + importComponent, + defaultExport, + path: getPathOption(options), + componentClass, + }; + }, +}; diff --git a/blueprints/component/files/__root__/__path__/__name__.ts b/blueprints/component/files/__root__/__path__/__name__.ts index ed14860d..777e6155 100644 --- a/blueprints/component/files/__root__/__path__/__name__.ts +++ b/blueprints/component/files/__root__/__path__/__name__.ts @@ -1,4 +1,3 @@ -import Component from '@ember/component'; +<%= importComponent %> <%= importTemplate %> -export default class <%= classifiedModuleName %> extends Component { -}; +export default <%= defaultExport %> diff --git a/blueprints/edition-detector.js b/blueprints/edition-detector.js new file mode 100644 index 00000000..4e37fcf1 --- /dev/null +++ b/blueprints/edition-detector.js @@ -0,0 +1,13 @@ +'use strict'; + +const { has } = require('@ember/edition-utils'); +const path = require('path'); + +module.exports = function (blueprint) { + blueprint.filesPath = function () { + let rootPath = has('octane') ? 'native-files' : 'files'; + return path.join(this.path, rootPath); + }; + + return blueprint; +}; diff --git a/node-tests/blueprints/component-addon-test.js b/node-tests/blueprints/component-addon-test.js new file mode 100644 index 00000000..b2f898f3 --- /dev/null +++ b/node-tests/blueprints/component-addon-test.js @@ -0,0 +1,34 @@ +'use strict'; + +const blueprintHelpers = require('ember-cli-blueprint-test-helpers/helpers'); +const setupTestHooks = blueprintHelpers.setupTestHooks; +const emberNew = blueprintHelpers.emberNew; +const emberGenerateDestroy = blueprintHelpers.emberGenerateDestroy; + +const chai = require('ember-cli-blueprint-test-helpers/chai'); +const expect = chai.expect; + +describe('Blueprint: component-addon', function () { + setupTestHooks(this); + + describe('in addon', function () { + beforeEach(function () { + return emberNew({ target: 'addon' }); + }); + + it('component-addon foo', function () { + return emberGenerateDestroy(['component-addon', 'foo'], (_file) => { + expect(_file('app/components/foo.js')).to.contain( + "export { default } from 'my-addon/components/foo';" + ); + }); + }); + it('component-addon foo-bar', function () { + return emberGenerateDestroy(['component-addon', 'foo-bar'], (_file) => { + expect(_file('app/components/foo-bar.js')).to.contain( + "export { default } from 'my-addon/components/foo-bar';" + ); + }); + }); + }); +}); diff --git a/node-tests/blueprints/component-class-addon-test.js b/node-tests/blueprints/component-class-addon-test.js new file mode 100644 index 00000000..1dcdd80c --- /dev/null +++ b/node-tests/blueprints/component-class-addon-test.js @@ -0,0 +1,34 @@ +'use strict'; + +const blueprintHelpers = require('ember-cli-blueprint-test-helpers/helpers'); +const setupTestHooks = blueprintHelpers.setupTestHooks; +const emberNew = blueprintHelpers.emberNew; +const emberGenerateDestroy = blueprintHelpers.emberGenerateDestroy; + +const chai = require('ember-cli-blueprint-test-helpers/chai'); +const expect = chai.expect; + +describe('Blueprint: component-class-addon', function () { + setupTestHooks(this); + + describe('in addon', function () { + beforeEach(function () { + return emberNew({ target: 'addon' }); + }); + + it('component-addon foo', function () { + return emberGenerateDestroy(['component-class-addon', 'foo'], (_file) => { + expect(_file('app/components/foo.js')).to.contain( + "export { default } from 'my-addon/components/foo';" + ); + }); + }); + it('component-addon foo-bar', function () { + return emberGenerateDestroy(['component-class-addon', 'foo-bar'], (_file) => { + expect(_file('app/components/foo-bar.js')).to.contain( + "export { default } from 'my-addon/components/foo-bar';" + ); + }); + }); + }); +}); diff --git a/node-tests/blueprints/component-class-test.js b/node-tests/blueprints/component-class-test.js new file mode 100644 index 00000000..72d588e4 --- /dev/null +++ b/node-tests/blueprints/component-class-test.js @@ -0,0 +1,730 @@ +'use strict'; + +const blueprintHelpers = require('ember-cli-blueprint-test-helpers/helpers'); +const setupTestHooks = blueprintHelpers.setupTestHooks; +const emberNew = blueprintHelpers.emberNew; +const emberGenerateDestroy = blueprintHelpers.emberGenerateDestroy; +const setupPodConfig = blueprintHelpers.setupPodConfig; +const modifyPackages = blueprintHelpers.modifyPackages; + +const chai = require('ember-cli-blueprint-test-helpers/chai'); +const expect = chai.expect; + +const generateFakePackageManifest = require('../helpers/generate-fake-package-manifest'); +const fixture = require('../helpers/fixture'); + +const setupTestEnvironment = require('../helpers/setup-test-environment'); +const enableOctane = setupTestEnvironment.enableOctane; + +const { EMBER_SET_COMPONENT_TEMPLATE } = require('../../blueprints/component'); + +const glimmerComponentContents = `import Component from '@glimmer/component'; + +export default class FooComponent extends Component { +} +`; + +const emberComponentContents = `import Component from '@ember/component'; + +export default Component.extend({ +}); +`; + +const templateOnlyContents = `import templateOnly from '@ember/component/template-only'; + +export default templateOnly(); +`; + +describe('Blueprint: component-class', function () { + setupTestHooks(this); + + describe('in app', function () { + beforeEach(function () { + return emberNew() + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); + + it('component-class foo', function () { + return emberGenerateDestroy(['component-class', 'foo'], (_file) => { + expect(_file('app/components/foo.js')).to.equal(emberComponentContents); + }); + }); + + if (EMBER_SET_COMPONENT_TEMPLATE) { + // classic default + it('component-class foo --component-structure=classic --component-class=@ember/component', function () { + return emberGenerateDestroy( + [ + 'component-class', + 'foo', + '--component-structure', + 'classic', + '--component-class', + '@ember/component', + ], + (_file) => { + expect(_file('app/components/foo.js')).to.equal(emberComponentContents); + } + ); + }); + + // Octane default + it('component-class foo --component-structure=flat --component-class=@glimmer/component', function () { + return emberGenerateDestroy( + [ + 'component-class', + '--component-structure', + 'flat', + '--component-class', + '@glimmer/component', + 'foo', + ], + (_file) => { + expect(_file('app/components/foo.js')).to.equal(glimmerComponentContents); + } + ); + }); + + it('component-class foo --component-structure=flat', function () { + return emberGenerateDestroy( + ['component-class', '--component-structure', 'flat', 'foo'], + (_file) => { + expect(_file('app/components/foo.js')).to.equal(emberComponentContents); + } + ); + }); + + it('component-class foo --component-structure=nested', function () { + return emberGenerateDestroy( + ['component-class', '--component-structure', 'nested', 'foo'], + (_file) => { + expect(_file('app/components/foo/index.js')).to.equal(emberComponentContents); + } + ); + }); + + it('component-class foo --component-structure=classic', function () { + return emberGenerateDestroy( + ['component-class', '--component-structure', 'classic', 'foo'], + (_file) => { + expect(_file('app/components/foo.js')).to.equal(emberComponentContents); + } + ); + }); + + it('component-class foo --component-class=@ember/component', function () { + return emberGenerateDestroy( + ['component-class', '--component-class', '@ember/component', 'foo'], + (_file) => { + expect(_file('app/components/foo.js')).to.equal(emberComponentContents); + } + ); + }); + + it('component-class foo --component-class=@glimmer/component', function () { + return emberGenerateDestroy( + ['component-class', '--component-class', '@glimmer/component', 'foo'], + (_file) => { + expect(_file('app/components/foo.js')).to.equal(glimmerComponentContents); + } + ); + }); + + it('component-class foo --component-class=@ember/component/template-only', function () { + return emberGenerateDestroy( + ['component-class', '--component-class', '@ember/component/template-only', 'foo'], + (_file) => { + expect(_file('app/components/foo.js')).to.equal(templateOnlyContents); + } + ); + }); + } + + it('component-class x-foo', function () { + return emberGenerateDestroy(['component-class', 'x-foo'], (_file) => { + expect(_file('app/components/x-foo.js')).to.equal(fixture('component/component-dash.js')); + }); + }); + + it('component-class foo/x-foo', function () { + return emberGenerateDestroy(['component-class', 'foo/x-foo'], (_file) => { + expect(_file('app/components/foo/x-foo.js')).to.equal( + fixture('component/component-nested.js') + ); + }); + }); + + it('component-class x-foo --path foo', function () { + return emberGenerateDestroy(['component-class', 'x-foo', '--path', 'foo'], (_file) => { + expect(_file('app/components/x-foo.js')).to.equal(fixture('component/component-dash.js')); + }); + }); + + it('component-class foo.js', function () { + return emberGenerateDestroy(['component-class', 'foo.js'], (_file) => { + expect(_file('app/components/foo.js.js')).to.not.exist; + expect(_file('app/components/foo.js')).to.equal(fixture('component/component.js')); + }); + }); + + it('component-class x-foo --pod', function () { + return emberGenerateDestroy(['component-class', 'x-foo', '--pod'], (_file) => { + expect(_file('app/components/x-foo/component.js')).to.equal( + fixture('component/component-dash.js') + ); + }); + }); + + it('component-class foo/x-foo --pod', function () { + return emberGenerateDestroy(['component-class', 'foo/x-foo', '--pod'], (_file) => { + expect(_file('app/components/foo/x-foo/component.js')).to.equal( + fixture('component/component-nested.js') + ); + }); + }); + + it('component-class x-foo --pod --path foo', function () { + return emberGenerateDestroy( + ['component-class', 'x-foo', '--pod', '--path', 'foo'], + (_file) => { + expect(_file('app/foo/x-foo/component.js')).to.equal( + fixture('component/component-dash.js') + ); + } + ); + }); + + it('component-class foo/x-foo --pod --path bar', function () { + return emberGenerateDestroy( + ['component-class', 'foo/x-foo', '--pod', '--path', 'bar'], + (_file) => { + expect(_file('app/bar/foo/x-foo/component.js')).to.equal( + fixture('component/component-nested.js') + ); + } + ); + }); + + it('component-class x-foo --pod --path bar/foo', function () { + return emberGenerateDestroy( + ['component-class', 'x-foo', '--pod', '--path', 'bar/foo'], + (_file) => { + expect(_file('app/bar/foo/x-foo/component.js')).to.equal( + fixture('component/component-dash.js') + ); + } + ); + }); + + it('component-class foo/x-foo --pod --path bar/baz', function () { + return emberGenerateDestroy( + ['component-class', 'foo/x-foo', '--pod', '--path', 'bar/baz'], + (_file) => { + expect(_file('app/bar/baz/foo/x-foo/component.js')).to.equal( + fixture('component/component-nested.js') + ); + } + ); + }); + + it('component-class x-foo --pod -no-path', function () { + return emberGenerateDestroy(['component-class', 'x-foo', '--pod', '-no-path'], (_file) => { + expect(_file('app/x-foo/component.js')).to.equal(fixture('component/component-dash.js')); + }); + }); + + it('component-class foo/x-foo --pod -no-path', function () { + return emberGenerateDestroy( + ['component-class', 'foo/x-foo', '--pod', '-no-path'], + (_file) => { + expect(_file('app/foo/x-foo/component.js')).to.equal( + fixture('component/component-nested.js') + ); + } + ); + }); + + it('component-class x-foo.js --pod', function () { + return emberGenerateDestroy(['component-class', 'x-foo.js', '--pod'], (_file) => { + expect(_file('app/components/x-foo.js/component.js')).to.not.exist; + expect(_file('app/components/x-foo/component.js')).to.equal( + fixture('component/component-dash.js') + ); + }); + }); + + describe('with podModulePrefix', function () { + beforeEach(function () { + setupPodConfig({ podModulePrefix: true }); + }); + + it('component-class foo --pod', function () { + return emberGenerateDestroy(['component-class', 'foo', '--pod'], (_file) => { + expect(_file('app/pods/components/foo/component.js')).to.equal( + fixture('component/component.js') + ); + }); + }); + + it('component-class x-foo --pod', function () { + return emberGenerateDestroy(['component-class', 'x-foo', '--pod'], (_file) => { + expect(_file('app/pods/components/x-foo/component.js')).to.equal( + fixture('component/component-dash.js') + ); + }); + }); + + it('component-class foo/x-foo --pod', function () { + return emberGenerateDestroy(['component-class', 'foo/x-foo', '--pod'], (_file) => { + expect(_file('app/pods/components/foo/x-foo/component.js')).to.equal( + fixture('component/component-nested.js') + ); + }); + }); + + it('component-class x-foo --pod --path foo', function () { + return emberGenerateDestroy( + ['component-class', 'x-foo', '--pod', '--path', 'foo'], + (_file) => { + expect(_file('app/pods/foo/x-foo/component.js')).to.equal( + fixture('component/component-dash.js') + ); + } + ); + }); + + it('component-class foo/x-foo --pod --path bar', function () { + return emberGenerateDestroy( + ['component-class', 'foo/x-foo', '--pod', '--path', 'bar'], + (_file) => { + expect(_file('app/pods/bar/foo/x-foo/component.js')).to.equal( + fixture('component/component-nested.js') + ); + } + ); + }); + + it('component-class x-foo --pod --path bar/foo', function () { + return emberGenerateDestroy( + ['component-class', 'x-foo', '--pod', '--path', 'bar/foo'], + (_file) => { + expect(_file('app/pods/bar/foo/x-foo/component.js')).to.equal( + fixture('component/component-dash.js') + ); + } + ); + }); + + it('component-class foo/x-foo --pod --path bar/baz', function () { + return emberGenerateDestroy( + ['component-class', 'foo/x-foo', '--pod', '--path', 'bar/baz'], + (_file) => { + expect(_file('app/pods/bar/baz/foo/x-foo/component.js')).to.equal( + fixture('component/component-nested.js') + ); + } + ); + }); + + it('component-class x-foo --pod -no-path', function () { + return emberGenerateDestroy(['component-class', 'x-foo', '--pod', '-no-path'], (_file) => { + expect(_file('app/pods/x-foo/component.js')).to.equal( + fixture('component/component-dash.js') + ); + }); + }); + + it('component-class foo/x-foo --pod -no-path', function () { + return emberGenerateDestroy( + ['component-class', 'foo/x-foo', '--pod', '-no-path'], + (_file) => { + expect(_file('app/pods/foo/x-foo/component.js')).to.equal( + fixture('component/component-nested.js') + ); + } + ); + }); + }); + }); + + describe('in app - octane', function () { + enableOctane(); + + beforeEach(function () { + return emberNew() + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); + + it('component-class foo', function () { + return emberGenerateDestroy(['component-class', 'foo'], (_file) => { + expect(_file('app/components/foo.js')).to.equal(glimmerComponentContents); + }); + }); + + it('component-class x-foo', function () { + return emberGenerateDestroy(['component-class', 'x-foo'], (_file) => { + expect(_file('app/components/x-foo.js')).to.equal( + glimmerComponentContents.replace('FooComponent', 'XFooComponent') + ); + }); + }); + + it('component-class x-foo.js', function () { + return emberGenerateDestroy(['component-class', 'x-foo.js'], (_file) => { + expect(_file('app/components/x-foo.js.js')).to.not.exist; + expect(_file('app/components/x-foo.js')).to.equal( + glimmerComponentContents.replace('FooComponent', 'XFooComponent') + ); + }); + }); + + it('component-class foo/x-foo', function () { + return emberGenerateDestroy(['component-class', 'foo/x-foo'], (_file) => { + expect(_file('app/components/foo/x-foo.js')).to.equal( + glimmerComponentContents.replace('FooComponent', 'FooXFooComponent') + ); + }); + }); + + it('component-class foo/x-foo --component-class="@glimmer/component"', function () { + return emberGenerateDestroy( + ['component-class', 'foo/x-foo', '--component-class', '@glimmer/component'], + (_file) => { + expect(_file('app/components/foo/x-foo.js')).to.equal( + glimmerComponentContents.replace('FooComponent', 'FooXFooComponent') + ); + } + ); + }); + }); + + describe('in addon', function () { + beforeEach(function () { + return emberNew({ target: 'addon' }) + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); + + it('component-class foo', function () { + return emberGenerateDestroy(['component-class', 'foo'], (_file) => { + expect(_file('addon/components/foo.js')).to.equal(fixture('component/component-addon.js')); + expect(_file('app/components/foo.js')).to.contain( + "export { default } from 'my-addon/components/foo';" + ); + }); + }); + + it('component-class x-foo', function () { + return emberGenerateDestroy(['component-class', 'x-foo'], (_file) => { + expect(_file('addon/components/x-foo.js')).to.equal( + fixture('component/component-addon-dash.js') + ); + expect(_file('app/components/x-foo.js')).to.contain( + "export { default } from 'my-addon/components/x-foo';" + ); + }); + }); + + it('component-class x-foo.js', function () { + return emberGenerateDestroy(['component-class', 'x-foo.js'], (_file) => { + expect(_file('addon/components/x-foo.js.js')).to.not.exist; + expect(_file('app/components/x-foo.js.js')).to.not.exist; + expect(_file('addon/components/x-foo.js')).to.equal( + fixture('component/component-addon-dash.js') + ); + expect(_file('app/components/x-foo.js')).to.contain( + "export { default } from 'my-addon/components/x-foo';" + ); + }); + }); + + it('component-class foo/x-foo', function () { + return emberGenerateDestroy(['component-class', 'foo/x-foo'], (_file) => { + expect(_file('addon/components/foo/x-foo.js')).to.equal( + fixture('component/component-addon-nested.js') + ); + expect(_file('app/components/foo/x-foo.js')).to.contain( + "export { default } from 'my-addon/components/foo/x-foo';" + ); + }); + }); + + it('component-class x-foo --dummy', function () { + return emberGenerateDestroy(['component-class', 'x-foo', '--dummy'], (_file) => { + expect(_file('tests/dummy/app/components/x-foo.js')).to.equal( + fixture('component/component-addon-dash.js') + ); + expect(_file('app/components/x-foo.js')).to.not.exist; + }); + }); + + it('component-class foo/x-foo --dummy', function () { + return emberGenerateDestroy(['component-class', 'foo/x-foo', '--dummy'], (_file) => { + expect(_file('tests/dummy/app/components/foo/x-foo.js')).to.equal( + fixture('component/component-addon-nested.js') + ); + expect(_file('app/components/foo/x-foo.js')).to.not.exist; + }); + }); + + it('component-class x-foo.js --dummy', function () { + return emberGenerateDestroy(['component-class', 'x-foo.js', '--dummy'], (_file) => { + expect(_file('tests/dummy/app/components/x-foo.js.js')).to.not.exist; + expect(_file('app/components/x-foo.js.js')).to.not.exist; + expect(_file('tests/dummy/app/components/x-foo.js')).to.equal( + fixture('component/component-addon-dash.js') + ); + expect(_file('app/components/x-foo.js')).to.not.exist; + }); + }); + + it('component-class x-foo --pod', function () { + return emberGenerateDestroy(['component-class', 'x-foo', '--pod'], (_file) => { + expect(_file('addon/components/x-foo/component.js')).to.equal( + fixture('component/component-addon-dash-pod.ts') + ); + expect(_file('app/components/x-foo/component.js')).to.contain( + "export { default } from 'my-addon/components/x-foo/component';" + ); + }); + }); + }); + + describe('in addon - octane', function () { + enableOctane(); + + beforeEach(function () { + return emberNew({ target: 'addon' }) + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); + + it('component-class foo', function () { + return emberGenerateDestroy(['component-class', 'foo'], (_file) => { + expect(_file('addon/components/foo.js')).to.equal(glimmerComponentContents); + expect(_file('app/components/foo.js')).to.contain( + "export { default } from 'my-addon/components/foo';" + ); + }); + }); + + it('component-class x-foo', function () { + return emberGenerateDestroy(['component-class', 'x-foo'], (_file) => { + expect(_file('addon/components/x-foo.js')).to.equal( + glimmerComponentContents.replace('FooComponent', 'XFooComponent') + ); + expect(_file('app/components/x-foo.js')).to.contain( + "export { default } from 'my-addon/components/x-foo';" + ); + }); + }); + + it('component-class foo/x-foo', function () { + return emberGenerateDestroy(['component-class', 'foo/x-foo'], (_file) => { + expect(_file('addon/components/foo/x-foo.js')).to.equal( + glimmerComponentContents.replace('FooComponent', 'FooXFooComponent') + ); + expect(_file('app/components/foo/x-foo.js')).to.contain( + "export { default } from 'my-addon/components/foo/x-foo';" + ); + }); + }); + + it('component-class x-foo --dummy', function () { + return emberGenerateDestroy(['component-class', 'x-foo', '--dummy'], (_file) => { + expect(_file('tests/dummy/app/components/x-foo.js')).equal( + glimmerComponentContents.replace('FooComponent', 'XFooComponent') + ); + expect(_file('app/components/x-foo.js')).to.not.exist; + }); + }); + + it('component-class foo/x-foo --dummy', function () { + return emberGenerateDestroy(['component-class', 'foo/x-foo', '--dummy'], (_file) => { + expect(_file('tests/dummy/app/components/foo/x-foo.js')).to.equal( + glimmerComponentContents.replace('FooComponent', 'FooXFooComponent') + ); + expect(_file('app/components/foo/x-foo.hbs')).to.not.exist; + }); + }); + }); + + describe('in in-repo-addon', function () { + beforeEach(function () { + return emberNew({ target: 'in-repo-addon' }) + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); + + it('component-class foo --in-repo-addon=my-addon', function () { + return emberGenerateDestroy( + ['component-class', 'foo', '--in-repo-addon=my-addon'], + (_file) => { + expect(_file('lib/my-addon/addon/components/foo.js')).to.equal( + fixture('component/component-addon.js') + ); + expect(_file('lib/my-addon/app/components/foo.js')).to.contain( + "export { default } from 'my-addon/components/foo';" + ); + } + ); + }); + + it('component-class x-foo --in-repo-addon=my-addon', function () { + return emberGenerateDestroy( + ['component-class', 'x-foo', '--in-repo-addon=my-addon'], + (_file) => { + expect(_file('lib/my-addon/addon/components/x-foo.js')).to.equal( + fixture('component/component-addon-dash.js') + ); + expect(_file('lib/my-addon/app/components/x-foo.js')).to.contain( + "export { default } from 'my-addon/components/x-foo';" + ); + } + ); + }); + + it('component-class x-foo.js --in-repo-addon=my-addon', function () { + return emberGenerateDestroy( + ['component-class', 'x-foo.js', '--in-repo-addon=my-addon'], + (_file) => { + expect(_file('lib/my-addon/addon/components/x-foo.js.js')).to.not.exist; + expect(_file('lib/my-addon/app/components/x-foo.js.js')).to.not.exist; + + expect(_file('lib/my-addon/addon/components/x-foo.js')).to.equal( + fixture('component/component-addon-dash.js') + ); + expect(_file('lib/my-addon/app/components/x-foo.js')).to.contain( + "export { default } from 'my-addon/components/x-foo';" + ); + } + ); + }); + + it('component-class foo/x-foo --in-repo-addon=my-addon', function () { + return emberGenerateDestroy( + ['component-class', 'foo/x-foo', '--in-repo-addon=my-addon'], + (_file) => { + expect(_file('lib/my-addon/addon/components/foo/x-foo.js')).to.equal( + fixture('component/component-addon-nested.js') + ); + expect(_file('lib/my-addon/app/components/foo/x-foo.js')).to.contain( + "export { default } from 'my-addon/components/foo/x-foo';" + ); + } + ); + }); + + it('component-class x-foo --in-repo-addon=my-addon --pod', function () { + return emberGenerateDestroy( + ['component-class', 'x-foo', '--in-repo-addon=my-addon', '--pod'], + (_file) => { + expect(_file('lib/my-addon/addon/components/x-foo/component.js')).to.equal( + fixture('component/component-addon-dash-pod.ts') + ); + expect(_file('lib/my-addon/app/components/x-foo/component.js')).to.contain( + "export { default } from 'my-addon/components/x-foo/component';" + ); + } + ); + }); + + it('component-class x-foo.js --in-repo-addon=my-addon --pod', function () { + return emberGenerateDestroy( + ['component-class', 'x-foo.js', '--in-repo-addon=my-addon', '--pod'], + (_file) => { + expect(_file('lib/my-addon/addon/components/x-foo/component.js.js')).to.not.exist; + expect(_file('lib/my-addon/app/components/x-foo/component.js.js')).to.not.exist; + expect(_file('lib/my-addon/addon/components/x-foo/component.js')).to.equal( + fixture('component/component-addon-dash-pod.ts') + ); + expect(_file('lib/my-addon/app/components/x-foo/component.js')).to.contain( + "export { default } from 'my-addon/components/x-foo/component';" + ); + } + ); + }); + + it('component-class foo/x-foo --in-repo-addon=my-addon --pod', function () { + return emberGenerateDestroy( + ['component-class', 'foo/x-foo', '--in-repo-addon=my-addon', '--pod'], + (_file) => { + expect(_file('lib/my-addon/addon/components/foo/x-foo/component.js')).to.equal( + fixture('component/component-addon-nested-pod.ts') + ); + expect(_file('lib/my-addon/app/components/foo/x-foo/component.js')).to.contain( + "export { default } from 'my-addon/components/foo/x-foo/component';" + ); + } + ); + }); + }); + + describe('in in-repo-addon - octane', function () { + enableOctane(); + + beforeEach(function () { + return emberNew({ target: 'in-repo-addon' }) + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); + + it('component-class foo --in-repo-addon=my-addon', function () { + return emberGenerateDestroy( + ['component-class', 'foo', '--in-repo-addon=my-addon'], + (_file) => { + expect(_file('lib/my-addon/addon/components/foo.js')).to.equal(glimmerComponentContents); + expect(_file('lib/my-addon/app/components/foo.js')).to.contain( + "export { default } from 'my-addon/components/foo';" + ); + } + ); + }); + + it('component-class x-foo --in-repo-addon=my-addon', function () { + return emberGenerateDestroy( + ['component-class', 'x-foo', '--in-repo-addon=my-addon'], + (_file) => { + expect(_file('lib/my-addon/addon/components/x-foo.js')).to.equal( + glimmerComponentContents.replace('FooComponent', 'XFooComponent') + ); + expect(_file('lib/my-addon/app/components/x-foo.js')).to.contain( + "export { default } from 'my-addon/components/x-foo';" + ); + } + ); + }); + }); +}); diff --git a/node-tests/blueprints/component-test.js b/node-tests/blueprints/component-test.js index 714beee3..f1da2e5a 100644 --- a/node-tests/blueprints/component-test.js +++ b/node-tests/blueprints/component-test.js @@ -4,8 +4,8 @@ const blueprintHelpers = require('ember-cli-blueprint-test-helpers/helpers'); const setupTestHooks = blueprintHelpers.setupTestHooks; const emberNew = blueprintHelpers.emberNew; const emberGenerateDestroy = blueprintHelpers.emberGenerateDestroy; -const modifyPackages = blueprintHelpers.modifyPackages; const setupPodConfig = blueprintHelpers.setupPodConfig; +const modifyPackages = blueprintHelpers.modifyPackages; const chai = require('ember-cli-blueprint-test-helpers/chai'); const expect = chai.expect; @@ -13,189 +13,82 @@ const expect = chai.expect; const generateFakePackageManifest = require('../helpers/generate-fake-package-manifest'); const fixture = require('../helpers/fixture'); -describe('Blueprint: component', function() { - setupTestHooks(this); - - describe('classic ember component', function() { - describe('in app', function() { - beforeEach(function() { - return emberNew().then(() => generateFakePackageManifest('ember-qunit', '4.6.0')); - }); - - it('component foo', function() { - return emberGenerateDestroy(['component', 'foo'], _file => { - expect(_file('app/components/foo.ts')).to.equal(fixture('component/component.ts')); - - expect(_file('app/templates/components/foo.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/components/foo-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo', - }, - }) - ); - }); - }); - - it('component x-foo', function() { - return emberGenerateDestroy(['component', 'x-foo'], _file => { - expect(_file('app/components/x-foo.ts')).to.equal(fixture('component/component-dash.ts')); - - expect(_file('app/templates/components/x-foo.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - }, - }) - ); - }); - }); - - it('component foo/x-foo', function() { - return emberGenerateDestroy(['component', 'foo/x-foo'], _file => { - expect(_file('app/components/foo/x-foo.ts')).to.equal( - fixture('component/component-nested.ts') - ); - - expect(_file('app/templates/components/foo/x-foo.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/components/foo/x-foo-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - }, - }) - ); - }); - }); - - it('component x-foo --path foo', function() { - return emberGenerateDestroy(['component', 'x-foo', '--path', 'foo'], _file => { - expect(_file('app/components/x-foo.ts')).to.equal(fixture('component/component-dash.ts')); - - expect(_file('app/templates/components/x-foo.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - }, - }) - ); - }); - }); - - it('component x-foo --pod', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod'], _file => { - expect(_file('app/components/x-foo/component.ts')).to.equal( - fixture('component/component-dash.ts') - ); +const setupTestEnvironment = require('../helpers/setup-test-environment'); +const enableOctane = setupTestEnvironment.enableOctane; - expect(_file('app/components/x-foo/template.hbs')).to.equal('{{yield}}'); +const { EMBER_SET_COMPONENT_TEMPLATE } = require('../../blueprints/component'); - expect(_file('tests/integration/components/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - }, - }) - ); - }); - }); +const glimmerComponentContents = `import Component from '@glimmer/component'; - it('component foo/x-foo --pod', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod'], _file => { - expect(_file('app/components/foo/x-foo/component.ts')).to.equal( - fixture('component/component-nested.ts') - ); +export default class FooComponent extends Component { +} +`; - expect(_file('app/components/foo/x-foo/template.hbs')).to.equal('{{yield}}'); +const emberComponentContents = `import Component from '@ember/component'; - expect(_file('tests/integration/components/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - }, - }) - ); - }); - }); - - it('component x-foo --pod --path foo', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'foo'], _file => { - expect(_file('app/foo/x-foo/component.ts')).to.equal( - fixture('component/component-dash.ts') - ); +export default Component.extend({ +}); +`; - expect(_file('app/foo/x-foo/template.hbs')).to.equal('{{yield}}'); +const templateOnlyContents = `import templateOnly from '@ember/component/template-only'; - expect(_file('tests/integration/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - path: 'foo/', - }, - }) - ); - }); - }); - - it('component foo/x-foo --pod --path bar', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '--path', 'bar'], _file => { - expect(_file('app/bar/foo/x-foo/component.ts')).to.equal( - fixture('component/component-nested.ts') - ); +export default templateOnly(); +`; - expect(_file('app/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); +describe('Blueprint: component', function () { + setupTestHooks(this); - expect(_file('tests/integration/bar/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - path: 'bar/', - }, - }) - ); - }); - }); + describe('in app', function () { + beforeEach(function () { + return emberNew() + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); - it('component x-foo --pod --path bar/foo', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'bar/foo'], _file => { - expect(_file('app/bar/foo/x-foo/component.ts')).to.equal( - fixture('component/component-dash.ts') - ); + it('component foo', function () { + return emberGenerateDestroy(['component', 'foo'], (_file) => { + expect(_file('app/components/foo.ts')).to.equal(emberComponentContents); - expect(_file('app/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/templates/components/foo.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/bar/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - path: 'bar/foo/', - }, - }) - ); - }); + expect(_file('tests/integration/components/foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo', + componentInvocation: 'Foo', + }, + }) + ); }); + }); - it('component foo/x-foo --pod --path bar/baz', function() { + if (EMBER_SET_COMPONENT_TEMPLATE) { + // classic default + it('component foo --component-structure=classic --component-class=@ember/component', function () { return emberGenerateDestroy( - ['component', 'foo/x-foo', '--pod', '--path', 'bar/baz'], - _file => { - expect(_file('app/bar/baz/foo/x-foo/component.ts')).to.equal( - fixture('component/component-nested.ts') - ); - - expect(_file('app/bar/baz/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/bar/baz/foo/x-foo/component-test.ts')).to.equal( + [ + 'component', + 'foo', + '--component-structure', + 'classic', + '--component-class', + '@ember/component', + ], + (_file) => { + expect(_file('app/components/foo.ts')).to.equal(emberComponentContents); + + expect(_file('app/templates/components/foo.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/components/foo-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { - component: 'foo/x-foo', - path: 'bar/baz/', + component: 'foo', + componentInvocation: 'Foo', }, }) ); @@ -203,404 +96,523 @@ describe('Blueprint: component', function() { ); }); - it('component x-foo --pod -no-path', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '-no-path'], _file => { - expect(_file('app/x-foo/component.ts')).to.equal(fixture('component/component-dash.ts')); - - expect(_file('app/x-foo/template.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - }, - }) - ); - }); - }); - - it('component foo/x-foo --pod -no-path', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '-no-path'], _file => { - expect(_file('app/foo/x-foo/component.ts')).to.equal( - fixture('component/component-nested.ts') - ); - - expect(_file('app/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - }, - }) - ); - }); + // Octane default + it('component foo --component-structure=flat --component-class=@glimmer/component', function () { + return emberGenerateDestroy( + [ + 'component', + '--component-structure', + 'flat', + '--component-class', + '@glimmer/component', + 'foo', + ], + (_file) => { + expect(_file('app/components/foo.ts')).to.equal(glimmerComponentContents); + + expect(_file('app/components/foo.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/components/foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo', + componentInvocation: 'Foo', + }, + }) + ); + } + ); }); - describe('with podModulePrefix', function() { - beforeEach(function() { - setupPodConfig({ podModulePrefix: true }); - }); - - it('component foo --pod', function() { - return emberGenerateDestroy(['component', 'foo', '--pod'], _file => { - expect(_file('app/pods/components/foo/component.ts')).to.equal( - fixture('component/component.ts') - ); + it('component foo --component-structure=flat', function () { + return emberGenerateDestroy( + ['component', '--component-structure', 'flat', 'foo'], + (_file) => { + expect(_file('app/components/foo.ts')).to.equal(emberComponentContents); - expect(_file('app/pods/components/foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/components/foo.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/components/foo/component-test.ts')).to.equal( + expect(_file('tests/integration/components/foo-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { component: 'foo', + componentInvocation: 'Foo', }, }) ); - }); - }); + } + ); + }); - it('component x-foo --pod', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod'], _file => { - expect(_file('app/pods/components/x-foo/component.ts')).to.equal( - fixture('component/component-dash.ts') - ); + it('component foo --component-structure=nested', function () { + return emberGenerateDestroy( + ['component', '--component-structure', 'nested', 'foo'], + (_file) => { + expect(_file('app/components/foo/index.ts')).to.equal(emberComponentContents); - expect(_file('app/pods/components/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/components/foo/index.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/components/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/components/foo-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { - component: 'x-foo', + component: 'foo', + componentInvocation: 'Foo', }, }) ); - }); - }); + } + ); + }); - it('component foo/x-foo --pod', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod'], _file => { - expect(_file('app/pods/components/foo/x-foo/component.ts')).to.equal( - fixture('component/component-nested.ts') - ); + it('component foo --component-structure=classic', function () { + return emberGenerateDestroy( + ['component', '--component-structure', 'classic', 'foo'], + (_file) => { + expect(_file('app/components/foo.ts')).to.equal(emberComponentContents); - expect(_file('app/pods/components/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/templates/components/foo.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/components/foo/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/components/foo-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { - component: 'foo/x-foo', + component: 'foo', + componentInvocation: 'Foo', }, }) ); - }); - }); + } + ); + }); - it('component x-foo --pod --path foo', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'foo'], _file => { - expect(_file('app/pods/foo/x-foo/component.ts')).to.equal( - fixture('component/component-dash.ts') - ); + it('component foo --component-class=@ember/component', function () { + return emberGenerateDestroy( + ['component', '--component-class', '@ember/component', 'foo'], + (_file) => { + expect(_file('app/components/foo.ts')).to.equal(emberComponentContents); - expect(_file('app/pods/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/templates/components/foo.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/foo/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/components/foo-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { - component: 'x-foo', - path: 'foo/', + component: 'foo', + componentInvocation: 'Foo', }, }) ); - }); - }); + } + ); + }); - it('component foo/x-foo --pod --path bar', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '--path', 'bar'], _file => { - expect(_file('app/pods/bar/foo/x-foo/component.ts')).to.equal( - fixture('component/component-nested.ts') - ); + it('component foo --component-class=@glimmer/component', function () { + return emberGenerateDestroy( + ['component', '--component-class', '@glimmer/component', 'foo'], + (_file) => { + expect(_file('app/components/foo.ts')).to.equal(glimmerComponentContents); - expect(_file('app/pods/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/templates/components/foo.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/bar/foo/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/components/foo-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { - component: 'foo/x-foo', - path: 'bar/', + component: 'foo', + componentInvocation: 'Foo', }, }) ); - }); - }); + } + ); + }); - it('component x-foo --pod --path bar/foo', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'bar/foo'], _file => { - expect(_file('app/pods/bar/foo/x-foo/component.ts')).to.equal( - fixture('component/component-dash.ts') - ); + it('component foo --component-class=@ember/component/template-only', function () { + return emberGenerateDestroy( + ['component', '--component-class', '@ember/component/template-only', 'foo'], + (_file) => { + expect(_file('app/components/foo.ts')).to.equal(templateOnlyContents); - expect(_file('app/pods/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/templates/components/foo.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/bar/foo/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/components/foo-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { - component: 'x-foo', - path: 'bar/foo/', + component: 'foo', + componentInvocation: 'Foo', }, }) ); - }); - }); + } + ); + }); + + it('component foo --no-component-class', function () { + return emberGenerateDestroy(['component', '--no-component-class', 'foo'], (_file) => { + expect(_file('app/components/foo.ts')).to.not.exist; - it('component foo/x-foo --pod --path bar/baz', function() { - return emberGenerateDestroy( - ['component', 'foo/x-foo', '--pod', '--path', 'bar/baz'], - _file => { - expect(_file('app/pods/bar/baz/foo/x-foo/component.ts')).to.equal( - fixture('component/component-nested.ts') - ); - - expect(_file('app/pods/bar/baz/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/pods/bar/baz/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - path: 'bar/baz/', - }, - }) - ); - } + expect(_file('app/templates/components/foo.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/components/foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo', + componentInvocation: 'Foo', + }, + }) ); }); + }); + } + it('component x-foo', function () { + return emberGenerateDestroy(['component', 'x-foo'], (_file) => { + expect(_file('app/components/x-foo.ts')).to.equal(fixture('component/component-dash.ts')); - it('component x-foo --pod -no-path', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '-no-path'], _file => { - expect(_file('app/pods/x-foo/component.ts')).to.equal( - fixture('component/component-dash.ts') - ); + expect(_file('app/templates/components/x-foo.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); + }); + }); - expect(_file('app/pods/x-foo/template.hbs')).to.equal('{{yield}}'); + it('component foo/x-foo', function () { + return emberGenerateDestroy(['component', 'foo/x-foo'], (_file) => { + expect(_file('app/components/foo/x-foo.ts')).to.equal( + fixture('component/component-nested.ts') + ); - expect(_file('tests/integration/pods/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - }, - }) - ); - }); - }); + expect(_file('app/templates/components/foo/x-foo.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/components/foo/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + }, + }) + ); + }); + }); + + it('component x-foo --path foo', function () { + return emberGenerateDestroy(['component', 'x-foo', '--path', 'foo'], (_file) => { + expect(_file('app/components/x-foo.ts')).to.equal(fixture('component/component-dash.ts')); + + expect(_file('app/templates/components/x-foo.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); + }); + }); + + it('component foo.ts', function () { + return emberGenerateDestroy(['component', 'foo.ts'], (_file) => { + expect(_file('app/components/foo.js.ts')).to.not.exist; + expect(_file('app/templates/components/foo.js.hbs')).to.not.exist; + expect(_file('tests/integration/components/foo.js-test.ts')).to.not.exist; + + expect(_file('app/components/foo.ts')).to.equal(fixture('component/component.ts')); + + expect(_file('app/templates/components/foo.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/components/foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo', + componentInvocation: 'Foo', + }, + }) + ); + }); + }); + + it('component x-foo --pod', function () { + return emberGenerateDestroy(['component', 'x-foo', '--pod'], (_file) => { + expect(_file('app/components/x-foo/component.ts')).to.equal( + fixture('component/component-dash.ts') + ); + + expect(_file('app/components/x-foo/template.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/components/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); + }); + }); - it('component foo/x-foo --pod -no-path', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '-no-path'], _file => { - expect(_file('app/pods/foo/x-foo/component.ts')).to.equal( - fixture('component/component-nested.ts') - ); + it('component foo/x-foo --pod', function () { + return emberGenerateDestroy(['component', 'foo/x-foo', '--pod'], (_file) => { + expect(_file('app/components/foo/x-foo/component.ts')).to.equal( + fixture('component/component-nested.ts') + ); - expect(_file('app/pods/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/components/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - }, - }) - ); - }); - }); + expect(_file('tests/integration/components/foo/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + }, + }) + ); }); }); - }); - describe('glimmer component', function() { - describe('in app', function() { - beforeEach(function() { - return emberNew() - .then(() => { - modifyPackages([ - { name: '@glimmer/component', dev: true }, - ]) - }) - .then(() => generateFakePackageManifest('@glimmer/component', '^0.16')) - .then(() => generateFakePackageManifest('ember-qunit', '4.6.0')); + it('component x-foo --pod --path foo', function () { + return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'foo'], (_file) => { + expect(_file('app/foo/x-foo/component.ts')).to.equal( + fixture('component/component-dash.ts') + ); + + expect(_file('app/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/foo/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + path: 'foo/', + }, + }) + ); }); + }); - it('component foo', function() { - return emberGenerateDestroy(['component', 'foo'], _file => { - expect(_file('app/components/foo.ts')).to.equal(fixture('component/glimmer-component.ts')); + it('component foo/x-foo --pod --path bar', function () { + return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '--path', 'bar'], (_file) => { + expect(_file('app/bar/foo/x-foo/component.ts')).to.equal( + fixture('component/component-nested.ts') + ); - expect(_file('app/templates/components/foo.hbs')).to.equal('{{yield}}'); + expect(_file('app/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/components/foo-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo', - }, - }) - ); - }); + expect(_file('tests/integration/bar/foo/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + path: 'bar/', + }, + }) + ); }); + }); - it('component x-foo', function() { - return emberGenerateDestroy(['component', 'x-foo'], _file => { - expect(_file('app/components/x-foo.ts')).to.equal(fixture('component/glimmer-component-dash.ts')); + it('component x-foo --pod --path bar/foo', function () { + return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'bar/foo'], (_file) => { + expect(_file('app/bar/foo/x-foo/component.ts')).to.equal( + fixture('component/component-dash.ts') + ); - expect(_file('app/templates/components/x-foo.hbs')).to.equal('{{yield}}'); + expect(_file('app/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - }, - }) - ); - }); + expect(_file('tests/integration/bar/foo/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + path: 'bar/foo/', + }, + }) + ); }); + }); - it('component foo/x-foo', function() { - return emberGenerateDestroy(['component', 'foo/x-foo'], _file => { - expect(_file('app/components/foo/x-foo.ts')).to.equal( - fixture('component/glimmer-component-nested.ts') + it('component foo/x-foo --pod --path bar/baz', function () { + return emberGenerateDestroy( + ['component', 'foo/x-foo', '--pod', '--path', 'bar/baz'], + (_file) => { + expect(_file('app/bar/baz/foo/x-foo/component.ts')).to.equal( + fixture('component/component-nested.ts') ); - expect(_file('app/templates/components/foo/x-foo.hbs')).to.equal('{{yield}}'); + expect(_file('app/bar/baz/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/components/foo/x-foo-test.ts')).to.equal( + expect(_file('tests/integration/bar/baz/foo/x-foo/component-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + path: 'bar/baz/', }, }) ); - }); + } + ); + }); + + it('component x-foo --pod -no-path', function () { + return emberGenerateDestroy(['component', 'x-foo', '--pod', '-no-path'], (_file) => { + expect(_file('app/x-foo/component.ts')).to.equal(fixture('component/component-dash.ts')); + + expect(_file('app/x-foo/template.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); }); + }); - it('component x-foo --path foo', function() { - return emberGenerateDestroy(['component', 'x-foo', '--path', 'foo'], _file => { - expect(_file('app/components/x-foo.ts')).to.equal(fixture('component/glimmer-component-dash.ts')); + it('component foo/x-foo --pod -no-path', function () { + return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '-no-path'], (_file) => { + expect(_file('app/foo/x-foo/component.ts')).to.equal( + fixture('component/component-nested.ts') + ); - expect(_file('app/templates/components/x-foo.hbs')).to.equal('{{yield}}'); + expect(_file('app/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - }, - }) - ); - }); + expect(_file('tests/integration/foo/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + }, + }) + ); }); + }); - it('component x-foo --pod', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod'], _file => { - expect(_file('app/components/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-dash.ts') - ); + it('component x-foo.js --pod', function () { + return emberGenerateDestroy(['component', 'x-foo.ts', '--pod'], (_file) => { + expect(_file('app/components/x-foo.js/component.ts')).to.not.exist; + expect(_file('app/components/x-foo.js/template.hbs')).to.not.exist; + expect(_file('tests/integration/components/x-foo.js/component-test.ts')).to.not.exist; - expect(_file('app/components/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/components/x-foo/component.ts')).to.equal( + fixture('component/component-dash.ts') + ); - expect(_file('tests/integration/components/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - }, - }) - ); - }); + expect(_file('app/components/x-foo/template.hbs')).to.equal('{{yield}}'); + + expect(_file('tests/integration/components/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); + }); + }); + + describe('with podModulePrefix', function () { + beforeEach(function () { + setupPodConfig({ podModulePrefix: true }); }); - it('component foo/x-foo --pod', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod'], _file => { - expect(_file('app/components/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-nested.ts') + it('component foo --pod', function () { + return emberGenerateDestroy(['component', 'foo', '--pod'], (_file) => { + expect(_file('app/pods/components/foo/component.ts')).to.equal( + fixture('component/component.ts') ); - expect(_file('app/components/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/pods/components/foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/components/foo/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/pods/components/foo/component-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { - component: 'foo/x-foo', + component: 'foo', + componentInvocation: 'Foo', }, }) ); }); }); - it('component x-foo --pod --path foo', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'foo'], _file => { - expect(_file('app/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-dash.ts') + it('component x-foo --pod', function () { + return emberGenerateDestroy(['component', 'x-foo', '--pod'], (_file) => { + expect(_file('app/pods/components/x-foo/component.ts')).to.equal( + fixture('component/component-dash.ts') ); - expect(_file('app/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/pods/components/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/foo/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/pods/components/x-foo/component-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { component: 'x-foo', - path: 'foo/', + componentInvocation: 'XFoo', }, }) ); }); }); - it('component foo/x-foo --pod --path bar', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '--path', 'bar'], _file => { - expect(_file('app/bar/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-nested.ts') + it('component foo/x-foo --pod', function () { + return emberGenerateDestroy(['component', 'foo/x-foo', '--pod'], (_file) => { + expect(_file('app/pods/components/foo/x-foo/component.ts')).to.equal( + fixture('component/component-nested.ts') ); - expect(_file('app/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/pods/components/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/bar/foo/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/pods/components/foo/x-foo/component-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { component: 'foo/x-foo', - path: 'bar/', + componentInvocation: 'Foo::XFoo', }, }) ); }); }); - it('component x-foo --pod --path bar/foo', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'bar/foo'], _file => { - expect(_file('app/bar/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-dash.ts') + it('component x-foo --pod --path foo', function () { + return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'foo'], (_file) => { + expect(_file('app/pods/foo/x-foo/component.ts')).to.equal( + fixture('component/component-dash.ts') ); - expect(_file('app/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/pods/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/bar/foo/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/pods/foo/x-foo/component-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { component: 'x-foo', - path: 'bar/foo/', + componentInvocation: 'XFoo', + path: 'foo/', }, }) ); }); }); - it('component foo/x-foo --pod --path bar/baz', function() { + it('component foo/x-foo --pod --path bar', function () { return emberGenerateDestroy( - ['component', 'foo/x-foo', '--pod', '--path', 'bar/baz'], - _file => { - expect(_file('app/bar/baz/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-nested.ts') + ['component', 'foo/x-foo', '--pod', '--path', 'bar'], + (_file) => { + expect(_file('app/pods/bar/foo/x-foo/component.ts')).to.equal( + fixture('component/component-nested.ts') ); - expect(_file('app/bar/baz/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/pods/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/bar/baz/foo/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/pods/bar/foo/x-foo/component-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { component: 'foo/x-foo', - path: 'bar/baz/', + componentInvocation: 'Foo::XFoo', + path: 'bar/', }, }) ); @@ -608,231 +620,214 @@ describe('Blueprint: component', function() { ); }); - it('component x-foo --pod -no-path', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '-no-path'], _file => { - expect(_file('app/x-foo/component.ts')).to.equal(fixture('component/glimmer-component-dash.ts')); - - expect(_file('app/x-foo/template.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - }, - }) - ); - }); - }); - - it('component foo/x-foo --pod -no-path', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '-no-path'], _file => { - expect(_file('app/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-nested.ts') - ); - - expect(_file('app/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - }, - }) - ); - }); - }); - - describe('with podModulePrefix', function() { - beforeEach(function() { - setupPodConfig({ podModulePrefix: true }); - }); - - it('component foo --pod', function() { - return emberGenerateDestroy(['component', 'foo', '--pod'], _file => { - expect(_file('app/pods/components/foo/component.ts')).to.equal( - fixture('component/glimmer-component.ts') + it('component x-foo --pod --path bar/foo', function () { + return emberGenerateDestroy( + ['component', 'x-foo', '--pod', '--path', 'bar/foo'], + (_file) => { + expect(_file('app/pods/bar/foo/x-foo/component.ts')).to.equal( + fixture('component/component-dash.ts') ); - expect(_file('app/pods/components/foo/template.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/pods/components/foo/component-test.ts')).to.equal( + expect(_file('app/pods/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('tests/integration/pods/bar/foo/x-foo/component-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { - component: 'foo', + component: 'x-foo', + componentInvocation: 'XFoo', + path: 'bar/foo/', }, }) ); - }); - }); + } + ); + }); - it('component x-foo --pod', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod'], _file => { - expect(_file('app/pods/components/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-dash.ts') + it('component foo/x-foo --pod --path bar/baz', function () { + return emberGenerateDestroy( + ['component', 'foo/x-foo', '--pod', '--path', 'bar/baz'], + (_file) => { + expect(_file('app/pods/bar/baz/foo/x-foo/component.ts')).to.equal( + fixture('component/component-nested.ts') ); - expect(_file('app/pods/components/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/pods/bar/baz/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/components/x-foo/component-test.ts')).to.equal( + expect(_file('tests/integration/pods/bar/baz/foo/x-foo/component-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { - component: 'x-foo', + component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + path: 'bar/baz/', }, }) ); - }); - }); + } + ); + }); - it('component foo/x-foo --pod', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod'], _file => { - expect(_file('app/pods/components/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-nested.ts') - ); + it('component x-foo --pod -no-path', function () { + return emberGenerateDestroy(['component', 'x-foo', '--pod', '-no-path'], (_file) => { + expect(_file('app/pods/x-foo/component.ts')).to.equal( + fixture('component/component-dash.ts') + ); - expect(_file('app/pods/components/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/pods/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/components/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - }, - }) - ); - }); + expect(_file('tests/integration/pods/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); }); + }); - it('component x-foo --pod --path foo', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'foo'], _file => { - expect(_file('app/pods/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-dash.ts') - ); + it('component foo/x-foo --pod -no-path', function () { + return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '-no-path'], (_file) => { + expect(_file('app/pods/foo/x-foo/component.ts')).to.equal( + fixture('component/component-nested.ts') + ); - expect(_file('app/pods/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('app/pods/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - path: 'foo/', - }, - }) - ); - }); + expect(_file('tests/integration/pods/foo/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + }, + }) + ); }); + }); + }); + }); - it('component foo/x-foo --pod --path bar', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '--path', 'bar'], _file => { - expect(_file('app/pods/bar/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-nested.ts') - ); + describe('in app - octane', function () { + enableOctane(); - expect(_file('app/pods/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + beforeEach(function () { + return emberNew() + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); - expect(_file('tests/integration/pods/bar/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - path: 'bar/', - }, - }) - ); - }); - }); + it('component foo', function () { + return emberGenerateDestroy(['component', 'foo'], (_file) => { + expect(_file('app/components/foo.ts')).to.not.exist; + expect(_file('app/components/foo.hbs')).to.equal('{{yield}}'); - it('component x-foo --pod --path bar/foo', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '--path', 'bar/foo'], _file => { - expect(_file('app/pods/bar/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-dash.ts') - ); + expect(_file('tests/integration/components/foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo', + componentInvocation: 'Foo', + }, + }) + ); + }); + }); - expect(_file('app/pods/bar/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + it('component x-foo', function () { + return emberGenerateDestroy(['component', 'x-foo'], (_file) => { + expect(_file('app/components/x-foo.ts')).to.not.exist; + expect(_file('app/components/x-foo.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/bar/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - path: 'bar/foo/', - }, - }) - ); - }); - }); + expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); + }); + }); - it('component foo/x-foo --pod --path bar/baz', function() { - return emberGenerateDestroy( - ['component', 'foo/x-foo', '--pod', '--path', 'bar/baz'], - _file => { - expect(_file('app/pods/bar/baz/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-nested.ts') - ); - - expect(_file('app/pods/bar/baz/foo/x-foo/template.hbs')).to.equal('{{yield}}'); - - expect(_file('tests/integration/pods/bar/baz/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - path: 'bar/baz/', - }, - }) - ); - } - ); - }); + it('component x-foo.ts', function () { + return emberGenerateDestroy(['component', 'x-foo.ts'], (_file) => { + expect(_file('app/components/x-foo.ts')).to.not.exist; + expect(_file('app/components/x-foo.js.ts')).to.not.exist; + expect(_file('app/templates/components/x-foo.js.hbs')).to.not.exist; + expect(_file('tests/integration/components/x-foo-test.ts')).to.not.exist; - it('component x-foo --pod -no-path', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod', '-no-path'], _file => { - expect(_file('app/pods/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-dash.ts') - ); + expect(_file('app/components/x-foo.hbs')).to.equal('{{yield}}'); - expect(_file('app/pods/x-foo/template.hbs')).to.equal('{{yield}}'); + expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); + }); + }); - expect(_file('tests/integration/pods/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'x-foo', - }, - }) - ); - }); - }); + it('component foo/x-foo', function () { + return emberGenerateDestroy(['component', 'foo/x-foo'], (_file) => { + expect(_file('app/components/foo/x-foo.ts')).to.not.exist; + expect(_file('app/components/foo/x-foo.hbs')).to.equal('{{yield}}'); - it('component foo/x-foo --pod -no-path', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--pod', '-no-path'], _file => { - expect(_file('app/pods/foo/x-foo/component.ts')).to.equal( - fixture('component/glimmer-component-nested.ts') - ); + expect(_file('tests/integration/components/foo/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + }, + }) + ); + }); + }); - expect(_file('app/pods/foo/x-foo/template.hbs')).to.equal('{{yield}}'); + it('component foo/x-foo --component-class="@glimmer/component"', function () { + return emberGenerateDestroy( + ['component', 'foo/x-foo', '--component-class', '@glimmer/component'], + (_file) => { + expect(_file('app/components/foo/x-foo.ts')).to.equal( + glimmerComponentContents.replace('FooComponent', 'FooXFooComponent') + ); + expect(_file('app/components/foo/x-foo.hbs')).to.equal('{{yield}}'); - expect(_file('tests/integration/pods/foo/x-foo/component-test.ts')).to.equal( - fixture('component-test/default-template.ts', { - replace: { - component: 'foo/x-foo', - }, - }) - ); - }); - }); - }); + expect(_file('tests/integration/components/foo/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + }, + }) + ); + } + ); }); }); - describe('in addon', function() { - beforeEach(function() { - return emberNew({ target: 'addon' }).then(() => - generateFakePackageManifest('ember-qunit', '4.6.0') - ); + describe('in addon', function () { + beforeEach(function () { + return emberNew({ target: 'addon' }) + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); }); - it('component foo', function() { - return emberGenerateDestroy(['component', 'foo'], _file => { + it('component foo', function () { + return emberGenerateDestroy(['component', 'foo'], (_file) => { expect(_file('addon/components/foo.ts')).to.equal(fixture('component/component-addon.ts')); expect(_file('addon/templates/components/foo.hbs')).to.equal('{{yield}}'); - expect(_file('app/components/foo.js')).to.contain( + expect(_file('app/components/foo.ts')).to.contain( "export { default } from 'my-addon/components/foo';" ); @@ -840,21 +835,50 @@ describe('Blueprint: component', function() { fixture('component-test/default-template.ts', { replace: { component: 'foo', + componentInvocation: 'Foo', + }, + }) + ); + }); + }); + + it('component x-foo', function () { + return emberGenerateDestroy(['component', 'x-foo'], (_file) => { + expect(_file('addon/components/x-foo.ts')).to.equal( + fixture('component/component-addon-dash.ts') + ); + + expect(_file('addon/templates/components/x-foo.hbs')).to.equal('{{yield}}'); + + expect(_file('app/components/x-foo.ts')).to.contain( + "export { default } from 'my-addon/components/x-foo';" + ); + + expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', }, }) ); }); }); - it('component x-foo', function() { - return emberGenerateDestroy(['component', 'x-foo'], _file => { + it('component x-foo.ts', function () { + return emberGenerateDestroy(['component', 'x-foo.ts'], (_file) => { + expect(_file('addon/components/x-foo.js.ts')).to.not.exist; + expect(_file('addon/templates/components/x-foo.js.hbs')).to.not.exist; + expect(_file('app/components/x-foo.js.ts')).to.not.exist; + expect(_file('tests/integration/components/x-foo.js-test.ts')).to.not.exist; + expect(_file('addon/components/x-foo.ts')).to.equal( fixture('component/component-addon-dash.ts') ); expect(_file('addon/templates/components/x-foo.hbs')).to.equal('{{yield}}'); - expect(_file('app/components/x-foo.js')).to.contain( + expect(_file('app/components/x-foo.ts')).to.contain( "export { default } from 'my-addon/components/x-foo';" ); @@ -862,21 +886,22 @@ describe('Blueprint: component', function() { fixture('component-test/default-template.ts', { replace: { component: 'x-foo', + componentInvocation: 'XFoo', }, }) ); }); }); - it('component foo/x-foo', function() { - return emberGenerateDestroy(['component', 'foo/x-foo'], _file => { + it('component foo/x-foo', function () { + return emberGenerateDestroy(['component', 'foo/x-foo'], (_file) => { expect(_file('addon/components/foo/x-foo.ts')).to.equal( fixture('component/component-addon-nested.ts') ); expect(_file('addon/templates/components/foo/x-foo.hbs')).to.equal('{{yield}}'); - expect(_file('app/components/foo/x-foo.js')).to.contain( + expect(_file('app/components/foo/x-foo.ts')).to.contain( "export { default } from 'my-addon/components/foo/x-foo';" ); @@ -884,49 +909,69 @@ describe('Blueprint: component', function() { fixture('component-test/default-template.ts', { replace: { component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', }, }) ); }); }); - it('component x-foo --dummy', function() { - return emberGenerateDestroy(['component', 'x-foo', '--dummy'], _file => { + it('component x-foo --dummy', function () { + return emberGenerateDestroy(['component', 'x-foo', '--dummy'], (_file) => { expect(_file('tests/dummy/app/components/x-foo.ts')).to.equal( fixture('component/component-addon-dash.ts') ); expect(_file('tests/dummy/app/templates/components/x-foo.hbs')).to.equal('{{yield}}'); - expect(_file('app/components/x-foo.js')).to.not.exist; + expect(_file('app/components/x-foo.ts')).to.not.exist; expect(_file('tests/unit/components/x-foo-test.ts')).to.not.exist; }); }); - it('component foo/x-foo --dummy', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--dummy'], _file => { + it('component foo/x-foo --dummy', function () { + return emberGenerateDestroy(['component', 'foo/x-foo', '--dummy'], (_file) => { expect(_file('tests/dummy/app/components/foo/x-foo.ts')).to.equal( fixture('component/component-addon-nested.ts') ); expect(_file('tests/dummy/app/templates/components/foo/x-foo.hbs')).to.equal('{{yield}}'); - expect(_file('app/components/foo/x-foo.js')).to.not.exist; + expect(_file('app/components/foo/x-foo.ts')).to.not.exist; expect(_file('tests/unit/components/foo/x-foo-test.ts')).to.not.exist; }); }); - it('component x-foo --pod', function() { - return emberGenerateDestroy(['component', 'x-foo', '--pod'], _file => { + it('component x-foo.js --dummy', function () { + return emberGenerateDestroy(['component', 'x-foo.ts', '--dummy'], (_file) => { + expect(_file('tests/dummy/app/components/x-foo.js.ts')).to.not.exist; + expect(_file('tests/dummy/app/templates/components/x-foo.js.hbs')).to.not.exist; + expect(_file('app/components/x-foo.js.ts')).to.not.exist; + expect(_file('tests/unit/components/x-foo.js-test.ts')).to.not.exist; + + expect(_file('tests/dummy/app/components/x-foo.ts')).to.equal( + fixture('component/component-addon-dash.ts') + ); + + expect(_file('tests/dummy/app/templates/components/x-foo.hbs')).to.equal('{{yield}}'); + + expect(_file('app/components/x-foo.ts')).to.not.exist; + + expect(_file('tests/unit/components/x-foo-test.ts')).to.not.exist; + }); + }); + + it('component x-foo --pod', function () { + return emberGenerateDestroy(['component', 'x-foo', '--pod'], (_file) => { expect(_file('addon/components/x-foo/component.ts')).to.equal( fixture('component/component-addon-dash-pod.ts') ); expect(_file('addon/components/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('app/components/x-foo/component.js')).to.contain( + expect(_file('app/components/x-foo/component.ts')).to.contain( "export { default } from 'my-addon/components/x-foo/component';" ); @@ -934,6 +979,7 @@ describe('Blueprint: component', function() { fixture('component-test/default-template.ts', { replace: { component: 'x-foo', + componentInvocation: 'XFoo', }, }) ); @@ -941,92 +987,279 @@ describe('Blueprint: component', function() { }); }); - describe('in in-repo-addon', function() { - beforeEach(function() { - return emberNew({ target: 'in-repo-addon' }).then(() => - generateFakePackageManifest('ember-qunit', '4.6.0') - ); + describe('in addon - octane', function () { + enableOctane(); + + beforeEach(function () { + return emberNew({ target: 'addon' }) + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); }); - it('component foo --in-repo-addon=my-addon', function() { - return emberGenerateDestroy(['component', 'foo', '--in-repo-addon=my-addon'], _file => { - expect(_file('lib/my-addon/addon/components/foo.ts')).to.equal( - fixture('component/component-addon.ts') - ); + it('component foo', function () { + return emberGenerateDestroy(['component', 'foo'], (_file) => { + expect(_file('addon/components/foo.ts')).to.not.exist; - expect(_file('lib/my-addon/addon/templates/components/foo.hbs')).to.equal('{{yield}}'); + expect(_file('addon/components/foo.hbs')).to.equal('{{yield}}'); - expect(_file('lib/my-addon/app/components/foo.js')).to.contain( + expect(_file('app/components/foo.ts')).to.contain( "export { default } from 'my-addon/components/foo';" ); + expect(_file('app/templates/components/foo.ts')).to.not.exist; + expect(_file('tests/integration/components/foo-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { component: 'foo', + componentInvocation: 'Foo', }, }) ); }); }); - it('component x-foo --in-repo-addon=my-addon', function() { - return emberGenerateDestroy(['component', 'x-foo', '--in-repo-addon=my-addon'], _file => { - expect(_file('lib/my-addon/addon/components/x-foo.ts')).to.equal( - fixture('component/component-addon-dash.ts') - ); + it('component x-foo', function () { + return emberGenerateDestroy(['component', 'x-foo'], (_file) => { + expect(_file('addon/components/x-foo.ts')).to.not.exist; - expect(_file('lib/my-addon/addon/templates/components/x-foo.hbs')).to.equal('{{yield}}'); + expect(_file('addon/components/x-foo.hbs')).to.equal('{{yield}}'); - expect(_file('lib/my-addon/app/components/x-foo.js')).to.contain( + expect(_file('app/components/x-foo.ts')).to.contain( "export { default } from 'my-addon/components/x-foo';" ); + expect(_file('app/templates/components/x-foo.ts')).to.not.exist; + expect(_file('app/components/x-foo.hbs')).to.not.exist; + expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { component: 'x-foo', + componentInvocation: 'XFoo', }, }) ); }); }); - it('component foo/x-foo --in-repo-addon=my-addon', function() { - return emberGenerateDestroy(['component', 'foo/x-foo', '--in-repo-addon=my-addon'], _file => { - expect(_file('lib/my-addon/addon/components/foo/x-foo.ts')).to.equal( - fixture('component/component-addon-nested.ts') - ); + it('component foo/x-foo', function () { + return emberGenerateDestroy(['component', 'foo/x-foo'], (_file) => { + expect(_file('addon/components/foo/x-foo.ts')).to.not.exist; - expect(_file('lib/my-addon/addon/templates/components/foo/x-foo.hbs')).to.equal( - '{{yield}}' - ); + expect(_file('addon/components/foo/x-foo.hbs')).to.equal('{{yield}}'); - expect(_file('lib/my-addon/app/components/foo/x-foo.js')).to.contain( + expect(_file('app/components/foo/x-foo.ts')).to.contain( "export { default } from 'my-addon/components/foo/x-foo';" ); + expect(_file('app/templates/components/foo/x-foo.ts')).to.not.exist; + expect(_file('tests/integration/components/foo/x-foo-test.ts')).to.equal( fixture('component-test/default-template.ts', { replace: { component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + }, + }) + ); + }); + }); + + it('component x-foo --dummy', function () { + return emberGenerateDestroy(['component', 'x-foo', '--dummy'], (_file) => { + expect(_file('tests/dummy/app/components/x-foo.ts')).to.not.exist; + + expect(_file('tests/dummy/app/components/x-foo.hbs')).to.equal('{{yield}}'); + + expect(_file('app/components/x-foo.ts')).to.not.exist; + expect(_file('app/components/x-foo.hbs')).to.not.exist; + expect(_file('app/templates/components/x-foo.ts')).to.not.exist; + + expect(_file('tests/integration/components/x-foo-test.ts')).to.not.exist; + }); + }); + + it('component foo/x-foo --dummy', function () { + return emberGenerateDestroy(['component', 'foo/x-foo', '--dummy'], (_file) => { + expect(_file('tests/dummy/app/components/foo/x-foo.ts')).to.not.exist; + + expect(_file('tests/dummy/app/components/foo/x-foo.hbs')).to.equal('{{yield}}'); + expect(_file('tests/dummy/app/templates/components/foo/x-foo.hbs')).to.not.exist; + + expect(_file('app/components/foo/x-foo.ts')).to.not.exist; + expect(_file('app/components/foo/x-foo.hbs')).to.not.exist; + expect(_file('app/templates/components/foo/x-foo.ts')).to.not.exist; + + expect(_file('tests/integration/components/foo/x-foo-test.ts')).to.not.exist; + }); + }); + }); + + describe('in in-repo-addon', function () { + beforeEach(function () { + return emberNew({ target: 'in-repo-addon' }) + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); + + it('component foo --in-repo-addon=my-addon', function () { + return emberGenerateDestroy(['component', 'foo', '--in-repo-addon=my-addon'], (_file) => { + expect(_file('lib/my-addon/addon/components/foo.ts')).to.equal( + fixture('component/component-addon.ts') + ); + + expect(_file('lib/my-addon/addon/templates/components/foo.hbs')).to.equal('{{yield}}'); + + expect(_file('lib/my-addon/app/components/foo.ts')).to.contain( + "export { default } from 'my-addon/components/foo';" + ); + + expect(_file('tests/integration/components/foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo', + componentInvocation: 'Foo', + }, + }) + ); + }); + }); + + it('component x-foo --in-repo-addon=my-addon', function () { + return emberGenerateDestroy(['component', 'x-foo', '--in-repo-addon=my-addon'], (_file) => { + expect(_file('lib/my-addon/addon/components/x-foo.ts')).to.equal( + fixture('component/component-addon-dash.ts') + ); + + expect(_file('lib/my-addon/addon/templates/components/x-foo.hbs')).to.equal('{{yield}}'); + + expect(_file('lib/my-addon/app/components/x-foo.ts')).to.contain( + "export { default } from 'my-addon/components/x-foo';" + ); + + expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', }, }) ); }); }); - it('component x-foo --in-repo-addon=my-addon --pod', function() { + it('component x-foo.js --in-repo-addon=my-addon', function () { + return emberGenerateDestroy( + ['component', 'x-foo.ts', '--in-repo-addon=my-addon'], + (_file) => { + expect(_file('lib/my-addon/addon/components/x-foo.js.ts')).to.not.exist; + expect(_file('lib/my-addon/addon/templates/components/x-foo.js.hbs')).to.not.exist; + expect(_file('lib/my-addon/app/components/x-foo.js.ts')).to.not.exist; + expect(_file('tests/integration/components/x-foo-test.ts')).to.not.exist; + + expect(_file('lib/my-addon/addon/components/x-foo.ts')).to.equal( + fixture('component/component-addon-dash.ts') + ); + + expect(_file('lib/my-addon/addon/templates/components/x-foo.hbs')).to.equal('{{yield}}'); + + expect(_file('lib/my-addon/app/components/x-foo.ts')).to.contain( + "export { default } from 'my-addon/components/x-foo';" + ); + + expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); + } + ); + }); + + it('component foo/x-foo --in-repo-addon=my-addon', function () { + return emberGenerateDestroy( + ['component', 'foo/x-foo', '--in-repo-addon=my-addon'], + (_file) => { + expect(_file('lib/my-addon/addon/components/foo/x-foo.ts')).to.equal( + fixture('component/component-addon-nested.ts') + ); + + expect(_file('lib/my-addon/addon/templates/components/foo/x-foo.hbs')).to.equal( + '{{yield}}' + ); + + expect(_file('lib/my-addon/app/components/foo/x-foo.ts')).to.contain( + "export { default } from 'my-addon/components/foo/x-foo';" + ); + + expect(_file('tests/integration/components/foo/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', + }, + }) + ); + } + ); + }); + + it('component x-foo --in-repo-addon=my-addon --pod', function () { return emberGenerateDestroy( ['component', 'x-foo', '--in-repo-addon=my-addon', '--pod'], - _file => { + (_file) => { + expect(_file('lib/my-addon/addon/components/x-foo/component.ts')).to.equal( + fixture('component/component-addon-dash-pod.ts') + ); + + expect(_file('lib/my-addon/addon/components/x-foo/template.hbs')).to.equal('{{yield}}'); + + expect(_file('lib/my-addon/app/components/x-foo/component.ts')).to.contain( + "export { default } from 'my-addon/components/x-foo/component';" + ); + + expect(_file('tests/integration/components/x-foo/component-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); + } + ); + }); + + it('component x-foo.js --in-repo-addon=my-addon --pod', function () { + return emberGenerateDestroy( + ['component', 'x-foo.ts', '--in-repo-addon=my-addon', '--pod'], + (_file) => { + expect(_file('lib/my-addon/addon/components/x-foo/component.js.ts')).to.not.exist; + expect(_file('lib/my-addon/addon/components/x-foo/template.js.hbs')).to.not.exist; + expect(_file('lib/my-addon/app/components/x-foo/component.js.ts')).to.not.exist; + expect(_file('tests/integration/components/x-foo/component-test.ts')).to.not.exist; + expect(_file('lib/my-addon/addon/components/x-foo/component.ts')).to.equal( fixture('component/component-addon-dash-pod.ts') ); expect(_file('lib/my-addon/addon/components/x-foo/template.hbs')).to.equal('{{yield}}'); - expect(_file('lib/my-addon/app/components/x-foo/component.js')).to.contain( + expect(_file('lib/my-addon/app/components/x-foo/component.ts')).to.contain( "export { default } from 'my-addon/components/x-foo/component';" ); @@ -1034,6 +1267,7 @@ describe('Blueprint: component', function() { fixture('component-test/default-template.ts', { replace: { component: 'x-foo', + componentInvocation: 'XFoo', }, }) ); @@ -1041,10 +1275,10 @@ describe('Blueprint: component', function() { ); }); - it('component foo/x-foo --in-repo-addon=my-addon --pod', function() { + it('component foo/x-foo --in-repo-addon=my-addon --pod', function () { return emberGenerateDestroy( ['component', 'foo/x-foo', '--in-repo-addon=my-addon', '--pod'], - _file => { + (_file) => { expect(_file('lib/my-addon/addon/components/foo/x-foo/component.ts')).to.equal( fixture('component/component-addon-nested-pod.ts') ); @@ -1053,7 +1287,7 @@ describe('Blueprint: component', function() { '{{yield}}' ); - expect(_file('lib/my-addon/app/components/foo/x-foo/component.js')).to.contain( + expect(_file('lib/my-addon/app/components/foo/x-foo/component.ts')).to.contain( "export { default } from 'my-addon/components/foo/x-foo/component';" ); @@ -1061,6 +1295,7 @@ describe('Blueprint: component', function() { fixture('component-test/default-template.ts', { replace: { component: 'foo/x-foo', + componentInvocation: 'Foo::XFoo', }, }) ); @@ -1068,4 +1303,67 @@ describe('Blueprint: component', function() { ); }); }); + + describe('in in-repo-addon - octane', function () { + enableOctane(); + + beforeEach(function () { + return emberNew({ target: 'in-repo-addon' }) + .then(() => + modifyPackages([ + { name: 'ember-qunit', delete: true }, + { name: 'ember-cli-qunit', dev: true }, + ]) + ) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); + + it('component foo --in-repo-addon=my-addon', function () { + return emberGenerateDestroy(['component', 'foo', '--in-repo-addon=my-addon'], (_file) => { + expect(_file('lib/my-addon/addon/components/foo.ts')).to.not.exist; + expect(_file('lib/my-addon/addon/components/foo.hbs')).to.equal('{{yield}}'); + expect(_file('lib/my-addon/addon/templates/components/foo.hbs')).to.not.exist; + + expect(_file('lib/my-addon/app/components/foo.ts')).to.contain( + "export { default } from 'my-addon/components/foo';" + ); + + expect(_file('lib/my-addon/app/templates/components/foo.ts')).to.not.exist; + expect(_file('lib/my-addon/app/components/foo.hbs')).to.not.exist; + + expect(_file('tests/integration/components/foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'foo', + componentInvocation: 'Foo', + }, + }) + ); + }); + }); + + it('component x-foo --in-repo-addon=my-addon', function () { + return emberGenerateDestroy(['component', 'x-foo', '--in-repo-addon=my-addon'], (_file) => { + expect(_file('lib/my-addon/addon/components/x-foo.ts')).to.not.exist; + expect(_file('lib/my-addon/addon/components/x-foo.hbs')).to.equal('{{yield}}'); + expect(_file('lib/my-addon/addon/templates/components/x-foo.hbs')).to.not.exist; + + expect(_file('lib/my-addon/app/components/x-foo.ts')).to.contain( + "export { default } from 'my-addon/components/x-foo';" + ); + + expect(_file('lib/my-addon/app/templates/components/x-foo.ts')).to.not.exist; + expect(_file('lib/my-addon/app/components/x-foo.hbs')).to.not.exist; + + expect(_file('tests/integration/components/x-foo-test.ts')).to.equal( + fixture('component-test/default-template.ts', { + replace: { + component: 'x-foo', + componentInvocation: 'XFoo', + }, + }) + ); + }); + }); + }); }); diff --git a/node-tests/fixtures/component-test/default-template.ts b/node-tests/fixtures/component-test/default-template.ts new file mode 100644 index 00000000..72df2c7f --- /dev/null +++ b/node-tests/fixtures/component-test/default-template.ts @@ -0,0 +1,24 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('<%= path =%><%= component =%>', 'Integration | Component | <%= component =%>', { + integration: true +}); + +test('it renders', function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`<<%= componentInvocation =%> />`); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage: + this.render(hbs` + <<%= componentInvocation =%>> + template block text + > + `); + + assert.equal(this.$().text().trim(), 'template block text'); +}); diff --git a/node-tests/fixtures/component-test/default.ts b/node-tests/fixtures/component-test/default.ts new file mode 100644 index 00000000..fc4c11ce --- /dev/null +++ b/node-tests/fixtures/component-test/default.ts @@ -0,0 +1,24 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('x-foo', 'Integration | Component | x-foo', { + integration: true +}); + +test('it renders', function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs``); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage: + this.render(hbs` + + template block text + + `); + + assert.equal(this.$().text().trim(), 'template block text'); +}); diff --git a/node-tests/fixtures/component/component-addon-dash-pod.ts b/node-tests/fixtures/component/component-addon-dash-pod.ts index 41a49ce1..6dfbdd55 100644 --- a/node-tests/fixtures/component/component-addon-dash-pod.ts +++ b/node-tests/fixtures/component/component-addon-dash-pod.ts @@ -3,6 +3,5 @@ import Component from '@ember/component'; import layout from './template'; export default class XFoo extends Component { -}) { layout = layout; }; diff --git a/node-tests/helpers/expect-error.js b/node-tests/helpers/expect-error.js index c96aab1e..e9eda641 100644 --- a/node-tests/helpers/expect-error.js +++ b/node-tests/helpers/expect-error.js @@ -8,7 +8,7 @@ module.exports = function expectError(promise, expectedErrorText) { .then(() => { throw new Error('the command should raise an exception'); }) - .catch(error => { - expect(error.message || error).to.equal(expectedErrorText); + .catch((error) => { + expect(error.message).to.equal(expectedErrorText); }); }; diff --git a/node-tests/helpers/fixture.js b/node-tests/helpers/fixture.js index 4b9c83b1..b55cde25 100644 --- a/node-tests/helpers/fixture.js +++ b/node-tests/helpers/fixture.js @@ -4,12 +4,14 @@ const path = require('path'); const file = require('ember-cli-blueprint-test-helpers/chai').file; const fs = require('fs'); -module.exports = function(filePath, options) { +module.exports = function (filePath, options) { if (!options) { return file(path.join(__dirname, '../fixtures', filePath)); } - let content = fs.readFileSync(path.join(__dirname, '../fixtures', filePath), { encoding: 'utf-8' }); + let content = fs.readFileSync(path.join(__dirname, '../fixtures', filePath), { + encoding: 'utf-8', + }); if (options.replace) { content = content.replace(/<%= (\w+) =%>/g, (_match, key) => options.replace[key] || ''); } diff --git a/node-tests/helpers/generate-fake-package-manifest.js b/node-tests/helpers/generate-fake-package-manifest.js index 50a3c664..ad521a48 100644 --- a/node-tests/helpers/generate-fake-package-manifest.js +++ b/node-tests/helpers/generate-fake-package-manifest.js @@ -1,22 +1,16 @@ -// @ts-check -const { writeFileSync } = require('fs'); -const { ensureDirSync } = require('fs-extra'); -const path = require('path'); +const fs = require('fs'); -/** - * Create fake package manifests on the file system to use in ensuring that the - * blueprint generator is well-behaved with different test environments (e.g. - * qunit and mocha). - * - * @param {string} name - * @param {string} version - */ -function generateFakePackageManifest(name, version) { - const targetDir = path.join('node_modules', name); - ensureDirSync(targetDir); - - const pkgFilePath = path.join(targetDir, 'package.json'); - writeFileSync(pkgFilePath, JSON.stringify({ version })); -} - -module.exports = generateFakePackageManifest; +module.exports = function generateFakePackageManifest(name, version) { + if (!fs.existsSync('node_modules')) { + fs.mkdirSync('node_modules'); + } + if (!fs.existsSync('node_modules/' + name)) { + fs.mkdirSync('node_modules/' + name); + } + fs.writeFileSync( + 'node_modules/' + name + '/package.json', + JSON.stringify({ + version: version, + }) + ); +}; diff --git a/node-tests/helpers/setup-test-environment.js b/node-tests/helpers/setup-test-environment.js new file mode 100644 index 00000000..25d9a60d --- /dev/null +++ b/node-tests/helpers/setup-test-environment.js @@ -0,0 +1,15 @@ +const { setEdition, clearEdition } = require('@ember/edition-utils'); + +function enableOctane() { + beforeEach(function () { + setEdition('octane'); + }); + + afterEach(function () { + clearEdition(); + }); +} + +module.exports = { + enableOctane, +};