Skip to content
This repository was archived by the owner on Oct 29, 2024. It is now read-only.

Commit f47afe2

Browse files
committed
bugfix: Fix usage of private methods
@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.
1 parent 7cf699b commit f47afe2

File tree

8 files changed

+205
-14
lines changed

8 files changed

+205
-14
lines changed

packages/@glimmer/babel-preset/index.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ module.exports = function (api, options) {
1111

1212
let precompile, templateCompilerPath;
1313

14+
const looseProps =
15+
typeof options.loose === 'object' &&
16+
options.loose !== null &&
17+
typeof options.loose.properties === 'boolean'
18+
? options.loose.properties
19+
: false;
20+
1421
if (options.precompile) {
1522
precompile = options.precompile;
1623
} else {
@@ -75,9 +82,19 @@ module.exports = function (api, options) {
7582
{ legacy: true },
7683
],
7784

78-
__loadPlugins
79-
? require('@babel/plugin-proposal-class-properties')
80-
: require.resolve('@babel/plugin-proposal-class-properties'),
85+
[
86+
__loadPlugins
87+
? require('@babel/plugin-proposal-class-properties')
88+
: require.resolve('@babel/plugin-proposal-class-properties'),
89+
{ loose: looseProps },
90+
],
91+
92+
[
93+
__loadPlugins
94+
? require('@babel/plugin-proposal-private-methods')
95+
: require.resolve('@babel/plugin-proposal-private-methods'),
96+
{ loose: looseProps },
97+
],
8198
],
8299
};
83100
};

packages/@glimmer/babel-preset/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77
"license": "MIT",
88
"private": false,
99
"scripts": {
10-
"test": "mocha -r esm"
10+
"test": "mocha -r esm --timeout 10000"
1111
},
1212
"dependencies": {
1313
"@babel/plugin-proposal-class-properties": "^7.8.3",
14+
"@babel/plugin-proposal-private-methods": "^7.13.0",
1415
"@babel/plugin-proposal-decorators": "^7.8.3",
1516
"@glimmer/compiler": "0.77.6",
1617
"@glimmer/vm-babel-plugins": "0.77.6",

packages/@glimmer/babel-preset/test/fixtures/debug/code.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ deprecate('this is deprecated', false, { id: 'foo' });
1313

1414
class Test {
1515
@tracked bar = 123;
16+
17+
#dog = "dog";
18+
19+
#cat() { return "cat" }
1620
}
1721

1822
precompileTemplate('Hello, world!', { strictMode: true, scope: { Test } });

packages/@glimmer/babel-preset/test/fixtures/debug/output.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var _class, _descriptor, _temp;
1+
var _class, _descriptor, _dog, _cat;
22

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

@@ -23,12 +23,19 @@ if (true
2323
(true && !(false) && deprecate('this is deprecated', false, {
2424
id: 'foo'
2525
}));
26-
let Test = (_class = (_temp = class Test {
26+
let Test = (_class = (_dog = new WeakMap(), _cat = new WeakSet(), class Test {
2727
constructor() {
28+
_cat.add(this);
29+
2830
_initializerDefineProperty(this, "bar", _descriptor, this);
31+
32+
_dog.set(this, {
33+
writable: true,
34+
value: "dog"
35+
});
2936
}
3037

31-
}, _temp), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "bar", [tracked], {
38+
}), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "bar", [tracked], {
3239
configurable: true,
3340
enumerable: true,
3441
writable: true,
@@ -37,6 +44,10 @@ let Test = (_class = (_temp = class Test {
3744
}
3845
})), _class);
3946

47+
function _cat2() {
48+
return "cat";
49+
}
50+
4051
_createTemplateFactory(
4152
/*
4253
Hello, world!
@@ -47,4 +58,4 @@ _createTemplateFactory(
4758
"moduleName": "(unknown template module)",
4859
"scope": null,
4960
"isStrictMode": true
50-
});
61+
});
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
{
22
"presets": [
3-
["@glimmer/babel-preset", { "isDebug": false }]
3+
[
4+
"@glimmer/babel-preset",
5+
{
6+
"isDebug": false
7+
}
8+
]
49
]
5-
}
10+
}

packages/@glimmer/babel-preset/test/fixtures/production/code.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ deprecate('this is deprecated', false, { id: 'foo' });
1313

1414
class Test {
1515
@tracked bar = 123;
16+
17+
#dog = "dog";
18+
19+
#cat() { return "cat" }
1620
}
1721

1822
precompileTemplate('Hello, world!', { strictMode: true, scope: { Test } });

packages/@glimmer/babel-preset/test/fixtures/production/output.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var _class, _descriptor, _temp;
1+
var _class, _descriptor, _dog, _cat;
22

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

@@ -23,12 +23,19 @@ if (false
2323
(false && !(false) && deprecate('this is deprecated', false, {
2424
id: 'foo'
2525
}));
26-
let Test = (_class = (_temp = class Test {
26+
let Test = (_class = (_dog = new WeakMap(), _cat = new WeakSet(), class Test {
2727
constructor() {
28+
_cat.add(this);
29+
2830
_initializerDefineProperty(this, "bar", _descriptor, this);
31+
32+
_dog.set(this, {
33+
writable: true,
34+
value: "dog"
35+
});
2936
}
3037

31-
}, _temp), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "bar", [tracked], {
38+
}), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "bar", [tracked], {
3239
configurable: true,
3340
enumerable: true,
3441
writable: true,
@@ -37,6 +44,10 @@ let Test = (_class = (_temp = class Test {
3744
}
3845
})), _class);
3946

47+
function _cat2() {
48+
return "cat";
49+
}
50+
4051
_createTemplateFactory(
4152
/*
4253
Hello, world!
@@ -47,4 +58,4 @@ _createTemplateFactory(
4758
"moduleName": "(unknown template module)",
4859
"scope": null,
4960
"isStrictMode": true
50-
});
61+
});

0 commit comments

Comments
 (0)