Skip to content

Commit 0b50166

Browse files
authored
Merge pull request #70 from bantic/clean-up-helpers-code
Clean up helpers code
2 parents 7f0ae7c + 0e3e56c commit 0b50166

12 files changed

Lines changed: 176 additions & 46 deletions

File tree

lib/models/file-info.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ var isTypeInSingleTypeCollection = require('../utils/is-type-in-single-type-coll
77
var defaultTypeForCollection = require('../utils/default-type-for-collection');
88
var calculateCollectionInfo = require('../utils/calculate-collection-info');
99
var importDeclarationsTransform = require('../transforms/import-declarations');
10+
var renameImportHelperTransform = require('../transforms/rename-helper-import');
1011
var inflection = require('inflection');
1112
var PodsSupport = require('../utils/pods-support');
1213
var typeForPodFile = PodsSupport.typeForPodFile;
@@ -176,6 +177,14 @@ var FileInfo = CoreObject.extend({
176177
},
177178
{ jscodeshift });
178179

180+
// Fixes "import { helper } from '@ember/component/helper'"
181+
// to "import { helper as buildHelper } from '@ember/component/helper'"
182+
newContents = renameImportHelperTransform(
183+
{
184+
source: newContents
185+
},
186+
{ jscodeshift });
187+
179188
var fullPath = path.join(this.projectRoot, this.sourceRelativePath);
180189

181190
fse.writeFileSync(fullPath, newContents, { encoding: 'utf-8' });

lib/transforms/import-declarations.js

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,6 @@ function transformer(file, api) {
55

66
var root = j(file.source);
77

8-
var foundHelper;
9-
10-
root.find(j.ImportDeclaration, {
11-
source: { value: '@ember/component/helper' },
12-
}).filter(path => {
13-
return path.value.specifiers[0].local.name === 'helper';
14-
})
15-
.forEach(function(path) {
16-
foundHelper = true;
17-
var specifier = j.importSpecifier(j.identifier('helper'), j.identifier('buildHelper'));
18-
19-
path.value.specifiers[0] = specifier;
20-
});
21-
22-
if (foundHelper) {
23-
root.find(j.CallExpression, {
24-
callee: { name: 'helper' }
25-
}).forEach(path => {
26-
path.value.callee.name = 'buildHelper';
27-
});
28-
}
29-
308
root.find(j.ImportDeclaration)
319
.find(j.Literal)
3210
.forEach(function(path) {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
function transformer(file, api) {
2+
var j = api.jscodeshift;
3+
4+
var foundHelper = false;
5+
6+
var root = j(file.source);
7+
8+
// Replaces:
9+
// import { helper } from '@ember/component/helper';
10+
// With:
11+
// import { helper as buildHelper } from '@ember/component/helper';
12+
root.find(j.ImportDeclaration, {
13+
source: { value: '@ember/component/helper' },
14+
}).filter(path => {
15+
return path.value.specifiers[0].local.name === 'helper';
16+
})
17+
.forEach(function(path) {
18+
foundHelper = true;
19+
var specifier = j.importSpecifier(
20+
j.identifier('helper'),
21+
j.identifier('buildHelper')
22+
);
23+
24+
path.value.specifiers[0] = specifier;
25+
});
26+
27+
// Replace helper(...) with buildHelper(...)
28+
if (foundHelper) {
29+
root.find(j.CallExpression, {
30+
callee: { name: 'helper' }
31+
}).forEach(path => {
32+
path.value.callee.name = 'buildHelper';
33+
});
34+
}
35+
36+
return root.toSource();
37+
}
38+
39+
module.exports = transformer;

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"license": "MIT",
1414
"devDependencies": {
1515
"assert-diff": "^1.0.1",
16+
"common-tags": "^1.7.2",
1617
"espower-loader": "^1.0.0",
1718
"fixturify": "^0.3.3",
1819
"jscodeshift": "^0.3.30",

test/fixtures/classic-acceptance/input.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
var stripIndents = require('common-tags').stripIndents;
2+
13
module.exports = {
24
'app': {
35
'app.js': '"app.js"',
@@ -19,10 +21,22 @@ module.exports = {
1921
}
2022
},
2123
'helpers': {
22-
'i18n.js': '"i18n helper"',
23-
'blerg.js': '"blerg helper"',
24-
'main-greeting-text.js': '"main-greeting-text helper"',
25-
'show-default-title.js': '"show-default-title helper"'
24+
'i18n.js': stripIndents`
25+
import { helper } from '@ember/component/helper';
26+
export default helper(i18n);
27+
`,
28+
'blerg.js': stripIndents`
29+
import { helper } from '@ember/component/helper';
30+
export default helper(blerg);
31+
`,
32+
'main-greeting-text.js': stripIndents`
33+
import { helper } from '@ember/component/helper';
34+
export default helper(mainGreetingText);
35+
`,
36+
'show-default-title.js': stripIndents`
37+
import { helper } from '@ember/component/helper';
38+
export default helper(showDefaultTitle);
39+
`,
2640
},
2741
'routes': {
2842
'index.js': '"index route"',

test/fixtures/classic-acceptance/output.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
var stripIndents = require('common-tags').stripIndents;
2+
13
module.exports = {
24
'src': {
35
'main.js': '"app.js"',
@@ -22,13 +24,22 @@ module.exports = {
2224
'component.js': '"baz-derp component"',
2325
'template.hbs': 'baz-derp template'
2426
},
25-
'i18n.js': '"i18n helper"',
26-
'blerg.js': '"blerg helper"'
27+
'i18n.js': stripIndents`
28+
import { helper as buildHelper } from '@ember/component/helper';
29+
export const helper = buildHelper(i18n);
30+
`,
31+
'blerg.js': stripIndents`
32+
import { helper as buildHelper } from '@ember/component/helper';
33+
export const helper = buildHelper(blerg);
34+
`,
2735
},
2836
'routes': {
2937
'index': {
3038
'-components': {
31-
'main-greeting-text.js': '"main-greeting-text helper"'
39+
'main-greeting-text.js': stripIndents`
40+
import { helper as buildHelper } from '@ember/component/helper';
41+
export const helper = buildHelper(mainGreetingText);
42+
`
3243
},
3344
'controller.js': '"index controller"',
3445
'route.js': '"index route"',
@@ -72,7 +83,10 @@ module.exports = {
7283
'new': {
7384
'-components': {
7485
'show-default-title': {
75-
'helper.js': '"show-default-title helper"',
86+
'helper.js': stripIndents`
87+
import { helper as buildHelper } from '@ember/component/helper';
88+
export default buildHelper(showDefaultTitle);
89+
`,
7690
'helper-integration-test.js': '"show-default-title helper integration test"'
7791
}
7892
},

test/fixtures/classic-named-exports/input.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
1+
var stripIndents = require('common-tags').stripIndents;
2+
13
module.exports = {
24
app: {
35
// ensure we do not rewrite main files
46
'app.js': 'export default App',
57
'router.js': 'export default Router',
68
helpers: {
7-
'titleize.js': 'import { helper } from \'@ember/component/helper\';\nexport default helper(function() { });',
8-
'capitalize.js': 'import { helper } from \'@ember/component/helper\';\nexport default helper(function() { });'
9+
'titleize.js': stripIndents`
10+
import { helper } from '@ember/component/helper';
11+
export default helper(function() { });
12+
`,
13+
'capitalize.js': stripIndents`
14+
import { helper } from '@ember/component/helper';
15+
export default helper(function() { });
16+
`
917
}
1018
},
1119

test/fixtures/classic-named-exports/output.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
1+
var stripIndents = require('common-tags').stripIndents;
2+
13
module.exports = {
24
src: {
35
'main.js': 'export default App',
46
'router.js': 'export default Router',
57
ui: {
68
components: {
7-
'titleize.js': 'import { helper as buildHelper } from \'@ember/component/helper\';\nexport const helper = buildHelper(function() { });',
9+
'titleize.js': stripIndents`
10+
import { helper as buildHelper } from '@ember/component/helper';
11+
export const helper = buildHelper(function() { });
12+
`,
813
'capitalize': {
9-
'helper.js': 'import { helper as buildHelper } from \'@ember/component/helper\';\nexport default buildHelper(function() { });',
14+
'helper.js': stripIndents`
15+
import { helper as buildHelper } from '@ember/component/helper';
16+
export default buildHelper(function() { });
17+
`,
1018
'helper-integration-test.js': '"capitalize helper test"'
1119
}
1220
}

test/fixtures/pods-acceptance/input.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
var stripIndents = require('common-tags').stripIndents;
2+
13
module.exports = {
24
'app': {
35
'app.js': '"app.js"',
@@ -56,10 +58,22 @@ module.exports = {
5658
},
5759
},
5860
'helpers': {
59-
'i18n.js': '"i18n helper"',
60-
'blerg.js': '"blerg helper"',
61-
'main-greeting-text.js': '"main-greeting-text helper"',
62-
'show-default-title.js': '"show-default-title helper"'
61+
'i18n.js': stripIndents`
62+
import { helper } from '@ember/component/helper';
63+
export default helper(i18n);
64+
`,
65+
'blerg.js': stripIndents`
66+
import { helper } from '@ember/component/helper';
67+
export default helper(blerg);
68+
`,
69+
'main-greeting-text.js': stripIndents`
70+
import { helper } from '@ember/component/helper';
71+
export default helper(mainGreetingText);
72+
`,
73+
'show-default-title.js': stripIndents`
74+
import { helper } from '@ember/component/helper';
75+
export default helper(showDefaultTitle);
76+
`,
6377
},
6478
'adapters': {
6579
'application.js': '"application adapter"',

test/fixtures/pods-custom-name-acceptance/input.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
var stripIndents = require('common-tags').stripIndents;
2+
13
module.exports = {
24
'app': {
35
'app.js': '"app.js"',
@@ -56,10 +58,22 @@ module.exports = {
5658
},
5759
},
5860
'helpers': {
59-
'i18n.js': '"i18n helper"',
60-
'blerg.js': '"blerg helper"',
61-
'main-greeting-text.js': '"main-greeting-text helper"',
62-
'show-default-title.js': '"show-default-title helper"'
61+
'i18n.js': stripIndents`
62+
import { helper } from '@ember/component/helper';
63+
export default helper(i18n);
64+
`,
65+
'blerg.js': stripIndents`
66+
import { helper } from '@ember/component/helper';
67+
export default helper(blerg);
68+
`,
69+
'main-greeting-text.js': stripIndents`
70+
import { helper } from '@ember/component/helper';
71+
export default helper(mainGreetingText);
72+
`,
73+
'show-default-title.js': stripIndents`
74+
import { helper } from '@ember/component/helper';
75+
export default helper(showDefaultTitle);
76+
`,
6377
},
6478
'adapters': {
6579
'application.js': '"application adapter"',

0 commit comments

Comments
 (0)