Skip to content

Commit f69d769

Browse files
author
Robert Jackson
authored
Merge pull request #116 from ember-cli/more-failure-cases
2 parents 3a5ab11 + bf0cefe commit f69d769

2 files changed

Lines changed: 84 additions & 18 deletions

File tree

__tests__/index-test.js

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,79 @@ describe('when used with @babel/preset-env', () => {
266266

267267
expect(actual).toEqual(`export default Ember.Application.extend({});`);
268268
});
269+
270+
it('does not have issues with ember-google-maps style helper', () => {
271+
let source = `
272+
import { computed, getProperties } from '@ember/object';
273+
import ObjectProxy from '@ember/object/proxy';
274+
import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';
275+
276+
let ObjectPromiseProxy = ObjectProxy.extend(PromiseProxyMixin);
277+
278+
let position = computed('lat', 'lng', function() {
279+
const { lat, lng } = getProperties(this, 'lat', 'lng');
280+
return (lat && lng) ? new google.maps.LatLng(lat, lng) : undefined;
281+
});
282+
283+
function position2() {
284+
return computed('lat', 'lng', function() {
285+
const { lat, lng } = getProperties(this, 'lat', 'lng');
286+
return (lat && lng) ? new google.maps.LatLng(lat, lng) : undefined;
287+
});
288+
}
289+
290+
function computedPromise(...args) {
291+
let func = args.pop();
292+
return computed(...args, function() {
293+
return ObjectPromiseProxy.create({
294+
promise: func.apply(this)
295+
});
296+
});
297+
}
298+
299+
export { computedPromise, position };
300+
`;
301+
302+
let actual = transformWithPresetEnv(source);
303+
304+
expect(actual).toEqual(
305+
`var ObjectPromiseProxy = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
306+
var position = Ember.computed('lat', 'lng', function () {
307+
var _Ember$getProperties = Ember.getProperties(this, 'lat', 'lng'),
308+
lat = _Ember$getProperties.lat,
309+
lng = _Ember$getProperties.lng;
310+
311+
return lat && lng ? new google.maps.LatLng(lat, lng) : undefined;
312+
});
313+
314+
function position2() {
315+
return Ember.computed('lat', 'lng', function () {
316+
var _Ember$getProperties2 = Ember.getProperties(this, 'lat', 'lng'),
317+
lat = _Ember$getProperties2.lat,
318+
lng = _Ember$getProperties2.lng;
319+
320+
return lat && lng ? new google.maps.LatLng(lat, lng) : undefined;
321+
});
322+
}
323+
324+
function computedPromise() {
325+
var _Ember;
326+
327+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
328+
args[_key] = arguments[_key];
329+
}
330+
331+
var func = args.pop();
332+
return (_Ember = Ember).computed.apply(_Ember, args.concat([function () {
333+
return ObjectPromiseProxy.create({
334+
promise: func.apply(this)
335+
});
336+
}]));
337+
}
338+
339+
export { computedPromise, position };`
340+
);
341+
});
269342
});
270343

271344
describe('when used with typescript', () => {

src/index.js

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ module.exports = function (babel) {
2525
node.type.startsWith('TS') &&
2626
!TSTypesRequiringModification.includes(node.type);
2727

28-
const GLOBALS_MAP = new Map();
29-
3028
// Flips the ember-rfc176-data mapping into an 'import' indexed object, that exposes the
3129
// default import as well as named imports, e.g. import {foo} from 'bar'
3230
const reverseMapping = {};
@@ -43,28 +41,23 @@ module.exports = function (babel) {
4341
});
4442

4543
function getMemberExpressionFor(global) {
46-
let memberExpression = GLOBALS_MAP.get(global);
47-
if (memberExpression === undefined) {
48-
let parts = global.split('.');
44+
let parts = global.split('.');
45+
46+
let object = parts.shift();
47+
let property = parts.shift();
48+
49+
let memberExpression = t.MemberExpression(
50+
t.identifier(object),
51+
t.identifier(property)
52+
);
4953

50-
let object = parts.shift();
54+
while (parts.length > 0) {
5155
let property = parts.shift();
5256

5357
memberExpression = t.MemberExpression(
54-
t.identifier(object),
58+
memberExpression,
5559
t.identifier(property)
5660
);
57-
58-
while (parts.length > 0) {
59-
let property = parts.shift();
60-
61-
memberExpression = t.MemberExpression(
62-
memberExpression,
63-
t.identifier(property)
64-
);
65-
}
66-
67-
GLOBALS_MAP.set(global, memberExpression);
6861
}
6962

7063
return memberExpression;

0 commit comments

Comments
 (0)