Skip to content

Commit 1620514

Browse files
authored
fix: add guard for unsupported versions (#86)
* chore: Drop support for node 14 * fix: specify packageManager so that corepack plays nicely * chore: add `@ember/string` * chore: remove volta * fix: add warning message for ember-source below v4.1 * fix: conditional tests
1 parent 623ce49 commit 1620514

File tree

7 files changed

+12940
-17887
lines changed

7 files changed

+12940
-17887
lines changed

.github/workflows/ci.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
- name: Install Node
2323
uses: actions/setup-node@v3
2424
with:
25-
node-version: 14.x
25+
node-version: 18.x
2626
cache: yarn
2727

2828
- name: Install Dependencies
@@ -48,7 +48,7 @@ jobs:
4848
- uses: actions/checkout@v3
4949
- uses: actions/setup-node@v3
5050
with:
51-
node-version: 14.x
51+
node-version: 18.x
5252
cache: yarn
5353

5454
- name: Install Dependencies
@@ -86,12 +86,12 @@ jobs:
8686
- name: Install Node
8787
uses: actions/setup-node@v3
8888
with:
89-
node-version: 14.x
89+
node-version: 18.x
9090
cache: yarn
9191

9292
- name: Install Dependencies
9393
run: until yarn install --frozen-lockfile; do echo "Retrying yarn"; done
9494

9595
- name: Run Tests
9696
run: ./node_modules/.bin/ember try:one ${{ matrix.try-scenario }}
97-
working-directory: test-app
97+
working-directory: test-app

ember-engines-router-service/package.json

+6-5
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
"start": "rollup --config --watch"
3737
},
3838
"dependencies": {
39-
"@embroider/addon-shim": "^1.8.4"
39+
"@embroider/addon-shim": "^1.8.4",
40+
"@embroider/macros": "^1.13.2"
4041
},
4142
"devDependencies": {
4243
"@babel/core": "^7.20.7",
@@ -55,8 +56,11 @@
5556
"prettier": "^2.8.1",
5657
"rollup": "^3.8.1"
5758
},
59+
"peerDependencies": {
60+
"ember-source": "^3.28.0 || ^4.0.0"
61+
},
5862
"engines": {
59-
"node": "14.* || 16.* || >= 18"
63+
"node": "16.* || 18.* || >= 20"
6064
},
6165
"publishConfig": {
6266
"registry": "https://registry.npmjs.org"
@@ -85,8 +89,5 @@
8589
"./initializers/ember-engines-router-service.js": "./dist/_app_/initializers/ember-engines-router-service.js",
8690
"./services/engine-router-service.js": "./dist/_app_/services/engine-router-service.js"
8791
}
88-
},
89-
"volta": {
90-
"extends": "../package.json"
9192
}
9293
}

ember-engines-router-service/src/services/engine-router-service.js

+23-11
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ import { action, computed } from '@ember/object';
55
import { reads } from '@ember/object/computed';
66
import { getOwner } from '@ember/application';
77
import Evented from '@ember/object/evented';
8+
import { macroCondition, dependencySatisfies } from '@embroider/macros';
89
import { namespaceEngineRouteName } from '../utils/namespace-engine-route-name';
910
import { getRootOwner } from '../utils/root-owner';
1011
import { resemblesURL } from '../utils/resembles-url';
1112

13+
const warningMessage =
14+
'Refresh method is not available in ember-source below v4.1';
15+
1216
export default class EngineRouterService extends Service.extend(Evented) {
1317
constructor(...args) {
1418
super(...args);
@@ -66,21 +70,29 @@ export default class EngineRouterService extends Service.extend(Evented) {
6670
}
6771

6872
refresh(routeName = this.currentRouteName, ...args) {
69-
if (resemblesURL(routeName)) {
70-
return this.externalRouter.refresh(routeName);
73+
if (macroCondition(dependencySatisfies('ember-source', '>= 4.1.0'))) {
74+
if (resemblesURL(routeName)) {
75+
return this.externalRouter.refresh(routeName);
76+
}
77+
78+
return this.externalRouter.refresh(
79+
namespaceEngineRouteName(this._mountPoint, routeName),
80+
...args
81+
);
82+
} else {
83+
assert(warningMessage);
7184
}
72-
73-
return this.externalRouter.refresh(
74-
namespaceEngineRouteName(this._mountPoint, routeName),
75-
...args
76-
);
7785
}
7886

7987
refreshExternal(routeName, ...args) {
80-
return this.externalRouter.refresh(
81-
this.getExternalRouteName(routeName),
82-
...args
83-
);
88+
if (macroCondition(dependencySatisfies('ember-source', '>= 4.1.0'))) {
89+
return this.externalRouter.refresh(
90+
this.getExternalRouteName(routeName),
91+
...args
92+
);
93+
} else {
94+
assert(warningMessage);
95+
}
8496
}
8597

8698
transitionTo(routeName, ...args) {

package.json

+1-4
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,5 @@
5454
},
5555
"npm": false
5656
},
57-
"volta": {
58-
"node": "14.21.2",
59-
"yarn": "1.22.19"
60-
}
57+
"packageManager": "yarn@1.22.9"
6158
}

test-app/package.json

+3-4
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535
"@babel/eslint-parser": "^7.19.1",
3636
"@ember/legacy-built-in-components": "0.4.1",
3737
"@ember/optional-features": "^2.0.0",
38+
"@ember/string": "^3.1.1",
3839
"@ember/test-helpers": "^2.9.3",
40+
"@embroider/macros": "^1.13.2",
3941
"@embroider/test-setup": "^2.0.2",
4042
"@glimmer/component": "^1.1.2",
4143
"@glimmer/tracking": "^1.1.2",
@@ -75,12 +77,9 @@
7577
"webpack": "^5.75.0"
7678
},
7779
"engines": {
78-
"node": "14.* || 16.* || >= 18"
80+
"node": "16.* || 18.* || >= 20"
7981
},
8082
"ember": {
8183
"edition": "octane"
82-
},
83-
"volta": {
84-
"extends": "../package.json"
8584
}
8685
}
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,50 @@
11
import { module, test } from 'qunit';
22
import { setupApplicationTest } from 'ember-qunit';
33
import { visit, find, click } from '@ember/test-helpers';
4+
import { macroCondition, dependencySatisfies } from '@embroider/macros';
45

5-
module('Acceptance | Engine Router Service | Refresh Method', function (hooks) {
6-
setupApplicationTest(hooks);
6+
if (macroCondition(dependencySatisfies('ember-source', '>= 4.1.0'))) {
7+
module(
8+
'Acceptance | Engine Router Service | Refresh Method',
9+
function (hooks) {
10+
setupApplicationTest(hooks);
711

8-
test('refresh without params triggers refresh with current route', async function (assert) {
9-
await visit('/routable-engine-demo/ember-blog/new');
12+
test('refresh without params triggers refresh with current route', async function (assert) {
13+
await visit('/routable-engine-demo/ember-blog/new');
1014

11-
let counter = await find('.route-refresh-counter').textContent;
12-
await click('.refresh');
15+
let counter = await find('.route-refresh-counter').textContent;
1316

14-
counter = parseInt(counter, 10);
15-
counter = ++counter;
16-
counter = counter.toString();
17-
assert.dom('.route-refresh-counter').hasText(counter);
18-
});
17+
await click('.refresh');
1918

20-
test('refresh with params triggers refresh on provided route', async function (assert) {
21-
await visit('/routable-engine-demo/ember-blog/new');
19+
counter = parseInt(counter, 10);
20+
counter = ++counter;
21+
counter = counter.toString();
22+
assert.dom('.route-refresh-counter').hasText(counter);
23+
});
2224

23-
let counter = await find('.route-refresh-counter').textContent;
24-
await click('.refresh-route');
25+
test('refresh with params triggers refresh on provided route', async function (assert) {
26+
await visit('/routable-engine-demo/ember-blog/new');
2527

26-
counter = parseInt(counter, 10);
27-
counter = ++counter;
28-
counter = counter.toString();
29-
assert.dom('.route-refresh-counter').hasText(counter);
30-
});
28+
let counter = await find('.route-refresh-counter').textContent;
29+
await click('.refresh-route');
3130

32-
test('refresh external route', async function (assert) {
33-
await visit('/routable-engine-demo/ember-blog/new');
31+
counter = parseInt(counter, 10);
32+
counter = ++counter;
33+
counter = counter.toString();
34+
assert.dom('.route-refresh-counter').hasText(counter);
35+
});
3436

35-
let counter = await find('.route-refresh-counter').textContent;
36-
await click('.refresh-external');
37+
test('refresh external route', async function (assert) {
38+
await visit('/routable-engine-demo/ember-blog/new');
3739

38-
counter = parseInt(counter, 10);
39-
counter = ++counter;
40-
counter = counter.toString();
41-
assert.dom('.global-refresh-counter').hasText(counter);
42-
});
43-
});
40+
let counter = await find('.route-refresh-counter').textContent;
41+
await click('.refresh-external');
42+
43+
counter = parseInt(counter, 10);
44+
counter = ++counter;
45+
counter = counter.toString();
46+
assert.dom('.global-refresh-counter').hasText(counter);
47+
});
48+
}
49+
);
50+
}

0 commit comments

Comments
 (0)