Skip to content

Commit a033c1e

Browse files
committed
fix(transformer/typescript): panic when using removeClassFieldsWithoutInitializer and private class members (#10838)
1 parent 11c34e7 commit a033c1e

5 files changed

Lines changed: 51 additions & 3 deletions

File tree

crates/oxc_transformer/src/typescript/class.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ impl<'a> TypeScript<'a, '_> {
212212

213213
class.body.body.retain(|element| {
214214
if let ClassElement::PropertyDefinition(prop) = element {
215-
if prop.value.is_none() {
215+
if prop.value.is_none() && !prop.key.is_private_identifier() {
216216
return false;
217217
}
218218
}

tasks/transform_conformance/snapshots/oxc.snap.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
commit: 578ac4df
22

3-
Passed: 152/252
3+
Passed: 152/253
44

55
# All Passed:
66
* babel-plugin-transform-class-static-block
@@ -44,7 +44,7 @@ after transform: SymbolId(0): [ReferenceId(0), ReferenceId(2), ReferenceId(6), R
4444
rebuilt : SymbolId(0): [ReferenceId(0), ReferenceId(2), ReferenceId(6), ReferenceId(10)]
4545

4646

47-
# babel-plugin-transform-typescript (4/24)
47+
# babel-plugin-transform-typescript (4/25)
4848
* allow-declare-fields-false/input.ts
4949
Unresolved references mismatch:
5050
after transform: ["dce"]
@@ -403,6 +403,11 @@ rebuilt : []
403403
* ts-declaration-empty-output/input.d.ts
404404
x Output mismatch
405405

406+
* ts-private-field-with-remove-class-fields-without-initializer/input.ts
407+
Unresolved references mismatch:
408+
after transform: ["ArrayBufferView", "Transferable", "WeakMap", "babelHelpers", "kTransferable", "kValue"]
409+
rebuilt : ["WeakMap", "babelHelpers", "kTransferable", "kValue"]
410+
406411
* use-define-for-class-fields/input.ts
407412
Unresolved references mismatch:
408413
after transform: ["dce"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export class ArrayBufferViewTransferable implements Transferable {
2+
#view: ArrayBufferView;
3+
constructor(view: ArrayBufferView) {
4+
this.#view = view;
5+
}
6+
7+
get [kTransferable](): object {
8+
return this.#view.buffer;
9+
}
10+
11+
get [kValue](): object {
12+
return this.#view;
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"plugins": [
3+
"transform-class-properties",
4+
[
5+
"transform-typescript",
6+
{
7+
"removeClassFieldsWithoutInitializer": true
8+
}
9+
]
10+
]
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
let _kTransferable, _kValue;
2+
var _view = /* @__PURE__ */ new WeakMap();
3+
_kTransferable = kTransferable;
4+
_kValue = kValue;
5+
export class ArrayBufferViewTransferable {
6+
constructor(view) {
7+
babelHelpers.classPrivateFieldInitSpec(this, _view, void 0);
8+
babelHelpers.classPrivateFieldSet2(_view, this, view);
9+
}
10+
11+
get [_kTransferable]() {
12+
return babelHelpers.classPrivateFieldGet2(_view, this).buffer;
13+
}
14+
15+
get [_kValue]() {
16+
return babelHelpers.classPrivateFieldGet2(_view, this);
17+
}
18+
}

0 commit comments

Comments
 (0)