From b6f36450d62916201bc990b349a5e70ef91496b2 Mon Sep 17 00:00:00 2001 From: Dunqing <29533304+Dunqing@users.noreply.github.com> Date: Wed, 19 Feb 2025 14:04:34 +0000 Subject: [PATCH] test(transformer/legacy-decorator): add an exec test that verifies it working with reflect-metadata well. (#9219) close: https://github.com/oxc-project/oxc/pull/9190#pullrequestreview-2625134907 --- pnpm-lock.yaml | 10 ++++++++++ tasks/transform_conformance/package.json | 3 ++- .../snapshots/oxc.snap.md | 4 ++-- .../snapshots/oxc_exec.snap.md | 2 +- .../test/fixtures/oxc/metadata/options.json | 10 ++++++++++ .../fixtures/oxc/metadata/properties/exec.ts | 18 ++++++++++++++++++ .../fixtures/oxc/metadata/properties/input.ts | 18 ++++++++++++++++++ .../fixtures/oxc/metadata/properties/output.js | 16 ++++++++++++++++ 8 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/options.json create mode 100644 tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/exec.ts create mode 100644 tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/input.ts create mode 100644 tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/output.js diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07820415e54c0..ec7481ac9b081 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -120,6 +120,8 @@ importers: npm/runtime: {} + npm/wasm-web: {} + tasks/benchmark/codspeed: devDependencies: axios: @@ -210,6 +212,9 @@ importers: '@oxc-project/runtime': specifier: link:../../npm/runtime version: link:../../npm/runtime + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 wasm/parser: dependencies: @@ -3063,6 +3068,9 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -6647,6 +6655,8 @@ snapshots: dependencies: picomatch: 2.3.1 + reflect-metadata@0.2.2: {} + regenerator-runtime@0.14.1: {} require-directory@2.1.1: {} diff --git a/tasks/transform_conformance/package.json b/tasks/transform_conformance/package.json index f7de57b80cb52..76a2405055cbd 100644 --- a/tasks/transform_conformance/package.json +++ b/tasks/transform_conformance/package.json @@ -18,7 +18,8 @@ "@babel/plugin-transform-optional-chaining": "^7.25.9", "@babel/plugin-transform-private-methods": "^7.25.9", "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@oxc-project/runtime": "link:../../npm/runtime" + "@oxc-project/runtime": "link:../../npm/runtime", + "reflect-metadata": "^0.2.2" }, "dependencies": { "@babel/plugin-transform-typescript": "^7.26.3" diff --git a/tasks/transform_conformance/snapshots/oxc.snap.md b/tasks/transform_conformance/snapshots/oxc.snap.md index b162be9bcd515..cbe169ec6534c 100644 --- a/tasks/transform_conformance/snapshots/oxc.snap.md +++ b/tasks/transform_conformance/snapshots/oxc.snap.md @@ -1,6 +1,6 @@ commit: acbc09a8 -Passed: 135/219 +Passed: 136/220 # All Passed: * babel-plugin-transform-class-static-block @@ -319,7 +319,7 @@ x Output mismatch x Output mismatch -# legacy-decorators (0/62) +# legacy-decorators (1/63) * typescript/accessor/decoratorOnClassAccessor1/input.ts Scope children mismatch: after transform: ScopeId(0): [ScopeId(1), ScopeId(2)] diff --git a/tasks/transform_conformance/snapshots/oxc_exec.snap.md b/tasks/transform_conformance/snapshots/oxc_exec.snap.md index eff9032ea5722..065312249f72c 100644 --- a/tasks/transform_conformance/snapshots/oxc_exec.snap.md +++ b/tasks/transform_conformance/snapshots/oxc_exec.snap.md @@ -2,7 +2,7 @@ commit: acbc09a8 node: v22.14.0 -Passed: 5 of 7 (71.43%) +Passed: 6 of 8 (75.00%) Failures: diff --git a/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/options.json b/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/options.json new file mode 100644 index 0000000000000..447e6fe72c11f --- /dev/null +++ b/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/options.json @@ -0,0 +1,10 @@ +{ + "plugins": [ + [ + "transform-legacy-decorator", + { + "emitDecoratorMetadata": true + } + ] + ] +} \ No newline at end of file diff --git a/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/exec.ts b/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/exec.ts new file mode 100644 index 0000000000000..5db4417993f49 --- /dev/null +++ b/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/exec.ts @@ -0,0 +1,18 @@ +import "reflect-metadata"; + +function dce() { +} + +class Example { + @dce + count: number = 0; + + @dce + message: string = ""; +} + +const example = new Example(); + +expect(Reflect.getMetadata("design:type", example, "count")).toBe(Number); +expect(Reflect.getMetadata("design:type", example, "message")).toBe(String); + diff --git a/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/input.ts b/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/input.ts new file mode 100644 index 0000000000000..5db4417993f49 --- /dev/null +++ b/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/input.ts @@ -0,0 +1,18 @@ +import "reflect-metadata"; + +function dce() { +} + +class Example { + @dce + count: number = 0; + + @dce + message: string = ""; +} + +const example = new Example(); + +expect(Reflect.getMetadata("design:type", example, "count")).toBe(Number); +expect(Reflect.getMetadata("design:type", example, "message")).toBe(String); + diff --git a/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/output.js b/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/output.js new file mode 100644 index 0000000000000..a04113e63ebbb --- /dev/null +++ b/tasks/transform_conformance/tests/legacy-decorators/test/fixtures/oxc/metadata/properties/output.js @@ -0,0 +1,16 @@ +import "reflect-metadata"; + +function dce() {} + +class Example { + count = 0; + message = ""; +} + +babelHelpers.decorate([dce, babelHelpers.decorateMetadata("design:type", Number)], Example.prototype, "count", void 0); +babelHelpers.decorate([dce, babelHelpers.decorateMetadata("design:type", String)], Example.prototype, "message", void 0); + +const example = new Example(); + +expect(Reflect.getMetadata("design:type", example, "count")).toBe(Number); +expect(Reflect.getMetadata("design:type", example, "message")).toBe(String);