diff --git a/packages/compat/tests/stage2.test.ts b/packages/compat/tests/stage2.test.ts index c6dccff88..e63bc379f 100644 --- a/packages/compat/tests/stage2.test.ts +++ b/packages/compat/tests/stage2.test.ts @@ -719,7 +719,7 @@ describe('stage2 build', function () { test('lazy engine css is imported', function () { expectFile('assets/_engine_/lazy-engine.js') .matches(` if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) { -i(\"../../../lazy-engine/lazy-engine.css\"); +i(\"../../node_modules/lazy-engine/lazy-engine.css\"); }`); }); @@ -760,7 +760,7 @@ i(\"../../../lazy-engine/lazy-engine.css\"); test('lazy engine css is not imported', function () { expectFile('assets/_engine_/lazy-engine.js') .doesNotMatch(` if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) { -i(\"../../../lazy-engine/lazy-engine.css\"); +i(\"../../node_modules/lazy-engine/lazy-engine.css\"); }`); }); }); diff --git a/packages/core/src/app.ts b/packages/core/src/app.ts index 57d727dc8..f14df5031 100644 --- a/packages/core/src/app.ts +++ b/packages/core/src/app.ts @@ -1081,7 +1081,7 @@ export class AppBuilder { if (engineMeta && engineMeta['implicit-styles']) { for (let style of engineMeta['implicit-styles']) { styles.push({ - path: explicitRelative(relativePath, join(engine.package.name, style)), + path: explicitRelative(dirname(relativePath), join(engine.appRelativePath, style)), }); } } diff --git a/test-packages/engines-host-app/app/router.js b/test-packages/engines-host-app/app/router.js index c31f5ea58..3d495a9ed 100644 --- a/test-packages/engines-host-app/app/router.js +++ b/test-packages/engines-host-app/app/router.js @@ -10,6 +10,7 @@ Router.map(function() { this.route('use-eager-engine'); this.mount('lazy-engine', { path: '/use-lazy-engine', as: 'use-lazy-engine' }); this.route('style-check'); + this.mount('lazy-in-repo-engine', { path: '/use-lazy-in-repo-engine', as: 'use-lazy-in-repo-engine' }); }); export default Router; diff --git a/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/engine.js b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/engine.js new file mode 100644 index 000000000..979fa1e50 --- /dev/null +++ b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/engine.js @@ -0,0 +1,15 @@ +import Engine from 'ember-engines/engine'; +import loadInitializers from 'ember-load-initializers'; +import Resolver from './resolver'; +import config from './config/environment'; + +const { modulePrefix } = config; + +const Eng = Engine.extend({ + modulePrefix, + Resolver +}); + +loadInitializers(Eng, modulePrefix); + +export default Eng; diff --git a/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/helpers/duplicated-helper.js b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/helpers/duplicated-helper.js new file mode 100644 index 000000000..d90769dca --- /dev/null +++ b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/helpers/duplicated-helper.js @@ -0,0 +1,7 @@ +import { helper } from '@ember/component/helper'; + +export function duplicatedHelper() { + return 'from-lazy-in-repo-engine'; +} + +export default helper(duplicatedHelper); diff --git a/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/resolver.js b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/resolver.js new file mode 100644 index 000000000..2fb563d6c --- /dev/null +++ b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/resolver.js @@ -0,0 +1,3 @@ +import Resolver from 'ember-resolver'; + +export default Resolver; diff --git a/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/routes.js b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/routes.js new file mode 100644 index 000000000..fbe9f1b40 --- /dev/null +++ b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/routes.js @@ -0,0 +1,3 @@ +import buildRoutes from 'ember-engines/routes'; + +export default buildRoutes(function () {}); diff --git a/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/styles/addon.css b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/styles/addon.css new file mode 100644 index 000000000..8088dad77 --- /dev/null +++ b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/styles/addon.css @@ -0,0 +1,6 @@ +.shared-style-target { + border-bottom-width: 2px; + border-bottom-style: solid; + border-bottom-color: blue; + content: 'lazy-in-repo-engine/addon/styles/addon.css'; +} diff --git a/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/templates/application.hbs b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/templates/application.hbs new file mode 100644 index 000000000..796f7ccee --- /dev/null +++ b/test-packages/engines-host-app/lib/lazy-in-repo-engine/addon/templates/application.hbs @@ -0,0 +1,6 @@ +
+

Lazy In-Repo Engine

+
+ {{duplicated-helper needAnArgumentHere="to force ember to consider this a helper"}} +
+
\ No newline at end of file diff --git a/test-packages/engines-host-app/lib/lazy-in-repo-engine/config/environment.js b/test-packages/engines-host-app/lib/lazy-in-repo-engine/config/environment.js new file mode 100644 index 000000000..550798a49 --- /dev/null +++ b/test-packages/engines-host-app/lib/lazy-in-repo-engine/config/environment.js @@ -0,0 +1,11 @@ +/* eslint-env node */ +'use strict'; + +module.exports = function(environment) { + let ENV = { + modulePrefix: 'lazy-in-repo-engine', + environment + }; + + return ENV; +}; diff --git a/test-packages/engines-host-app/lib/lazy-in-repo-engine/index.js b/test-packages/engines-host-app/lib/lazy-in-repo-engine/index.js new file mode 100644 index 000000000..c03b813fa --- /dev/null +++ b/test-packages/engines-host-app/lib/lazy-in-repo-engine/index.js @@ -0,0 +1,12 @@ +/* eslint-env node */ +'use strict'; + +const EngineAddon = require('ember-engines/lib/engine-addon'); + +module.exports = EngineAddon.extend({ + name: 'lazy-in-repo-engine', + + lazyLoading: Object.freeze({ + enabled: true, + }), +}); diff --git a/test-packages/engines-host-app/lib/lazy-in-repo-engine/package.json b/test-packages/engines-host-app/lib/lazy-in-repo-engine/package.json new file mode 100644 index 000000000..fadffeddb --- /dev/null +++ b/test-packages/engines-host-app/lib/lazy-in-repo-engine/package.json @@ -0,0 +1,17 @@ +{ + "name": "lazy-in-repo-engine", + "keywords": [ + "ember-addon", + "ember-engine" + ], + "dependencies": { + "ember-cli-htmlbars": "*", + "ember-cli-babel": "*" + }, + "devDependencies": { + "ember-engines": "*" + }, + "volta": { + "extends": "../../package.json" + } +} diff --git a/test-packages/engines-host-app/package.json b/test-packages/engines-host-app/package.json index c55b505f1..7767f7bab 100644 --- a/test-packages/engines-host-app/package.json +++ b/test-packages/engines-host-app/package.json @@ -63,5 +63,10 @@ }, "volta": { "extends": "../../package.json" + }, + "ember-addon": { + "paths": [ + "lib/lazy-in-repo-engine" + ] } } diff --git a/test-packages/engines-host-app/tests/acceptance/basics-test.js b/test-packages/engines-host-app/tests/acceptance/basics-test.js index b3e4c6d6c..bc3c2927a 100644 --- a/test-packages/engines-host-app/tests/acceptance/basics-test.js +++ b/test-packages/engines-host-app/tests/acceptance/basics-test.js @@ -105,6 +105,58 @@ module('Acceptance | basics', function (hooks) { // See TODO comment in above test skip('lazy engines own app tree is lazy', function () {}); + // this test must be the first test that loads the lazy-in-repo-engine as after it has loaded + // it will not "unload" and we are checkign that these modules are entering require.entries + // for the first time. + test('lazy-in-repo-engine', async function (assert) { + await visit('/'); + const entriesBefore = Object.entries(window.require.entries).length; + let rules = arrayOfCSSRules(document.styleSheets, '.shared-style-target', 'content'); + + assert.notOk(rules.includes('lazy-in-repo-engine/addon/styles/addon.css')); + + await visit('/style-check'); + assert.dom('.shared-style-target').exists(); + + assert.equal( + getComputedStyle(document.querySelector('.shared-style-target'))['border-left-width'], + '2px', + 'eager-engine styles are present' + ); + + assert.equal( + getComputedStyle(document.querySelector('.shared-style-target'))['border-bottom-width'], + '0px', + 'lazy-in-repo-engine addon styles are not present' + ); + + await visit('/use-lazy-in-repo-engine'); + const entriesAfter = Object.entries(window.require.entries).length; + assert.ok(!!window.require.entries['lazy-in-repo-engine/helpers/duplicated-helper']); + assert.ok(entriesAfter > entriesBefore); + assert.equal(currentURL(), '/use-lazy-in-repo-engine'); + assert.dom('[data-test-lazy-in-repo-engine-main] > h1').containsText('Lazy In-Repo Engine'); + assert.dom('[data-test-duplicated-helper]').containsText('from-lazy-in-repo-engine'); + + rules = arrayOfCSSRules(document.styleSheets, '.shared-style-target', 'content'); + + assert.ok(rules.includes('lazy-in-repo-engine/addon/styles/addon.css')); + + await visit('/style-check'); + + assert.equal( + getComputedStyle(document.querySelector('.shared-style-target'))['border-left-width'], + '2px', + 'eager-engine styles are still present' + ); + + assert.equal( + getComputedStyle(document.querySelector('.shared-style-target'))['border-bottom-width'], + '2px', + 'lazy-in-repo-engine addon styles are present' + ); + }); + test('eager-engine', async function (assert) { await visit('/use-eager-engine'); assert.equal(currentURL(), '/use-eager-engine');