Skip to content

Commit

Permalink
bugfix: Fix usage of private methods
Browse files Browse the repository at this point in the history
@babel/plugin-proposal-private-methods requires seeing
@babel/plugin-proposal-class-properties being set before it can run. In
Babel plugins run before presets. Because of this, these 2 plugins must
exist in the preset.
  • Loading branch information
chadhietala committed Apr 26, 2021
1 parent 7cf699b commit 258f109
Show file tree
Hide file tree
Showing 8 changed files with 204 additions and 13 deletions.
23 changes: 20 additions & 3 deletions packages/@glimmer/babel-preset/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ module.exports = function (api, options) {

let precompile, templateCompilerPath;

const looseProps =
typeof options.loose === 'object' &&
options.loose !== null &&
typeof options.loose.properties === 'boolean'
? options.loose.properties
: false;

if (options.precompile) {
precompile = options.precompile;
} else {
Expand Down Expand Up @@ -75,9 +82,19 @@ module.exports = function (api, options) {
{ legacy: true },
],

__loadPlugins
? require('@babel/plugin-proposal-class-properties')
: require.resolve('@babel/plugin-proposal-class-properties'),
[
__loadPlugins
? require('@babel/plugin-proposal-class-properties')
: require.resolve('@babel/plugin-proposal-class-properties'),
{ loose: looseProps },
],

[
__loadPlugins
? require('@babel/plugin-proposal-private-methods')
: require.resolve('@babel/plugin-proposal-private-methods'),
{ loose: looseProps },
],
],
};
};
1 change: 1 addition & 0 deletions packages/@glimmer/babel-preset/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
},
"dependencies": {
"@babel/plugin-proposal-class-properties": "^7.8.3",
"@babel/plugin-proposal-private-methods": "^7.13.0",
"@babel/plugin-proposal-decorators": "^7.8.3",
"@glimmer/compiler": "0.77.6",
"@glimmer/vm-babel-plugins": "0.77.6",
Expand Down
4 changes: 4 additions & 0 deletions packages/@glimmer/babel-preset/test/fixtures/debug/code.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ deprecate('this is deprecated', false, { id: 'foo' });

class Test {
@tracked bar = 123;

#dog = "dog";

#cat() { return "cat" }
}

precompileTemplate('Hello, world!', { strictMode: true, scope: { Test } });
19 changes: 15 additions & 4 deletions packages/@glimmer/babel-preset/test/fixtures/debug/output.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var _class, _descriptor, _temp;
var _class, _descriptor, _dog, _cat;

import { createTemplateFactory as _createTemplateFactory } from "@glimmer/core";

Expand All @@ -23,12 +23,19 @@ if (true
(true && !(false) && deprecate('this is deprecated', false, {
id: 'foo'
}));
let Test = (_class = (_temp = class Test {
let Test = (_class = (_dog = new WeakMap(), _cat = new WeakSet(), class Test {
constructor() {
_cat.add(this);

_initializerDefineProperty(this, "bar", _descriptor, this);

_dog.set(this, {
writable: true,
value: "dog"
});
}

}, _temp), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "bar", [tracked], {
}), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "bar", [tracked], {
configurable: true,
enumerable: true,
writable: true,
Expand All @@ -37,6 +44,10 @@ let Test = (_class = (_temp = class Test {
}
})), _class);

function _cat2() {
return "cat";
}

_createTemplateFactory(
/*
Hello, world!
Expand All @@ -47,4 +58,4 @@ _createTemplateFactory(
"moduleName": "(unknown template module)",
"scope": null,
"isStrictMode": true
});
});
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"presets": [
["@glimmer/babel-preset", { "isDebug": false }]
[
"@glimmer/babel-preset",
{
"isDebug": false
}
]
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ deprecate('this is deprecated', false, { id: 'foo' });

class Test {
@tracked bar = 123;

#dog = "dog";

#cat() { return "cat" }
}

precompileTemplate('Hello, world!', { strictMode: true, scope: { Test } });
19 changes: 15 additions & 4 deletions packages/@glimmer/babel-preset/test/fixtures/production/output.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var _class, _descriptor, _temp;
var _class, _descriptor, _dog, _cat;

import { createTemplateFactory as _createTemplateFactory } from "@glimmer/core";

Expand All @@ -23,12 +23,19 @@ if (false
(false && !(false) && deprecate('this is deprecated', false, {
id: 'foo'
}));
let Test = (_class = (_temp = class Test {
let Test = (_class = (_dog = new WeakMap(), _cat = new WeakSet(), class Test {
constructor() {
_cat.add(this);

_initializerDefineProperty(this, "bar", _descriptor, this);

_dog.set(this, {
writable: true,
value: "dog"
});
}

}, _temp), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "bar", [tracked], {
}), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "bar", [tracked], {
configurable: true,
enumerable: true,
writable: true,
Expand All @@ -37,6 +44,10 @@ let Test = (_class = (_temp = class Test {
}
})), _class);

function _cat2() {
return "cat";
}

_createTemplateFactory(
/*
Hello, world!
Expand All @@ -47,4 +58,4 @@ _createTemplateFactory(
"moduleName": "(unknown template module)",
"scope": null,
"isStrictMode": true
});
});
Loading

0 comments on commit 258f109

Please sign in to comment.