From e4b5948f1c85bea47df46174cc1b28309e8a28a5 Mon Sep 17 00:00:00 2001 From: Lukas Bombach Date: Mon, 1 Sep 2025 22:08:02 +0200 Subject: [PATCH 1/3] added length check to node.extends in TSInterfaceDeclaration --- package.json | 1 + pnpm-lock.yaml | 217 ++++++++++++++++++++++++++++++++++++++ src/languages/ts/index.js | 2 +- test/oxc.test.js | 51 +++++++++ 4 files changed, 270 insertions(+), 1 deletion(-) create mode 100644 test/oxc.test.js diff --git a/package.json b/package.json index 0fa59ac..bffa6a0 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@vitest/ui": "^2.1.1", "acorn": "^8.15.0", "dts-buddy": "^0.6.2", + "oxc-parser": "0.86.0", "prettier": "^3.0.3", "typescript": "^5.7.2", "vitest": "^2.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53807dd..a3c9bb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,6 +30,9 @@ importers: dts-buddy: specifier: ^0.6.2 version: 0.6.2(typescript@5.7.2) + oxc-parser: + specifier: 0.86.0 + version: 0.86.0 prettier: specifier: ^3.0.3 version: 3.3.3 @@ -104,6 +107,15 @@ packages: '@changesets/write@0.3.2': resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} + '@emnapi/core@1.5.0': + resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -269,6 +281,9 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@napi-rs/wasm-runtime@1.0.3': + resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -281,6 +296,98 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-parser/binding-android-arm64@0.86.0': + resolution: {integrity: sha512-BfNFEWpRo4gqLHKvRuQmhbPGeJqB1Ka/hsPhKf1imAojwUcf/Dr/yRkZBuEi2yc1LWBjApKYJEqpsBUmtqSY1Q==} + engines: {node: '>=20.0.0'} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.86.0': + resolution: {integrity: sha512-gRSnEHcyNEfLdNj6v8XKcuHUaZnRpH2lOZFztuGEi23ENydPOQVEtiZYexuHOTeaLGgzw+93TgB4n/YkjYodug==} + engines: {node: '>=20.0.0'} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.86.0': + resolution: {integrity: sha512-6mdymm8i+VpLTJP19D3PSFumMmAyfhhhIRWcRHsc0bL7CSZjCWbvRb00ActKrGKWtsol/A/KKgqglJwpvjlzOA==} + engines: {node: '>=20.0.0'} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.86.0': + resolution: {integrity: sha512-mc2xYRPxhzFg4NX1iqfIWP+8ORtXiNpAkaomNDepegQFlIFUmrESa3IJrKJ/4vg77Tbti7omHbraOqwdTk849g==} + engines: {node: '>=20.0.0'} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.86.0': + resolution: {integrity: sha512-LZzapjFhwGQMKefcFsn3lJc/mTY37fBlm0jjEvETgNCyd5pH4gDwOcrp/wZHAz2qw5uLWOHaa69I6ci5lBjJgA==} + engines: {node: '>=20.0.0'} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.86.0': + resolution: {integrity: sha512-/rhJMpng7/Qgn8hE4sigxTRb04+zdO0K1kfAMZ3nONphk5r2Yk2RjyEpLLz17adysCyQw/KndaMHNv8GR8VMNg==} + engines: {node: '>=20.0.0'} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.86.0': + resolution: {integrity: sha512-IXEZnk6O0zJg5gDn1Zvt5Qx62Z3E+ewrKwPgMfExqnNCLq+Ix2g7hQypevm/S6qxVgyz5HbiW+a/5ziMFXTCJQ==} + engines: {node: '>=20.0.0'} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-arm64-musl@0.86.0': + resolution: {integrity: sha512-QG7DUVZ/AtBaUGMhgToB4glOdq0MGAEYU1MJQpNB5HqiEcOpteF9Pd+oPfscj2zrGPd47KNyljtJRBKJr6Ut0w==} + engines: {node: '>=20.0.0'} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-gnu@0.86.0': + resolution: {integrity: sha512-smz+J6riX2du2lp0IKeZSaOBIhhoE2N/L1IQdOLCpzB0ikjCDBoyNKdDM7te8ZDq3KDnRmJChmhQGd8P1/LGBQ==} + engines: {node: '>=20.0.0'} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-s390x-gnu@0.86.0': + resolution: {integrity: sha512-vas1BOMWVdicuimmi5Y+xPj3csaYQquVA45Im9a/DtVsypVeh8RWYXBMO1qJNM5Fg5HD0QvYNqxvftx3c+f5pg==} + engines: {node: '>=20.0.0'} + cpu: [s390x] + os: [linux] + + '@oxc-parser/binding-linux-x64-gnu@0.86.0': + resolution: {integrity: sha512-3Fsi+JA3NwdZdrpC6AieOP48cuBrq0q59JgnR0mfoWfr9wHrbn2lt8EEubrj6EXpBUmu1Zii7S9NNRC6fl/d+w==} + engines: {node: '>=20.0.0'} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-linux-x64-musl@0.86.0': + resolution: {integrity: sha512-89/d43EW76wJagz8u5zcKW8itB2rnS/uN7un5APb8Ebme8TePBwDyxo64J6oY5rcJYkfJ6lEszSF/ovicsNVPw==} + engines: {node: '>=20.0.0'} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-wasm32-wasi@0.86.0': + resolution: {integrity: sha512-gRrGmE2L27stNMeiAucy/ffHF9VjYr84MizuJzSYnnKmd5WXf3HelNdd0UYSJnpb7APBuyFSN2Oato+Qb6yAFw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.86.0': + resolution: {integrity: sha512-parTnpNviJYR3JIFLseDGip1KkYbhWLeuZG9OMek62gr6Omflddoytvb17s+qODoZqFAVjvuOmVipDdjTl9q3Q==} + engines: {node: '>=20.0.0'} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.86.0': + resolution: {integrity: sha512-FTso24eQh3vPTe/SOTf0/RXfjJ13tsk5fw728fm+z5y6Rb+mmEBfyVT6XxyGhEwtdfnRSZawheX74/9caI1etw==} + engines: {node: '>=20.0.0'} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.86.0': + resolution: {integrity: sha512-bJ57vWNQnOnUe5ZxUkrWpLyExxqb0BoyQ+IRmI/V1uxHbBNBzFGMIjKIf5ECFsgS0KgUUl8TM3a4xpeAtAnvIA==} + '@polka/url@1.0.0-next.25': resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} @@ -369,6 +476,9 @@ packages: peerDependencies: acorn: ^8.9.0 + '@tybys/wasm-util@0.10.0': + resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -682,6 +792,10 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + oxc-parser@0.86.0: + resolution: {integrity: sha512-v9+uomgqyLSxlq3qlaMqJJtXg2+rUsa368p/zkmgi5OMGmcZAtZt5GIeSVFF84iNET+08Hdx/rUtd/FyIdfNFQ==} + engines: {node: '>=20.0.0'} + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -889,6 +1003,9 @@ packages: peerDependencies: typescript: '>=4.2.0' + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + typescript@5.7.2: resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} @@ -1123,6 +1240,22 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 + '@emnapi/core@1.5.0': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.5.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.21.5': optional: true @@ -1230,6 +1363,13 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@napi-rs/wasm-runtime@1.0.3': + dependencies: + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.0 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1242,6 +1382,55 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.18.0 + '@oxc-parser/binding-android-arm64@0.86.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.86.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.86.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.86.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.86.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.86.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.86.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.86.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.86.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.86.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.86.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.86.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.86.0': + dependencies: + '@napi-rs/wasm-runtime': 1.0.3 + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.86.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.86.0': + optional: true + + '@oxc-project/types@0.86.0': {} + '@polka/url@1.0.0-next.25': {} '@rollup/rollup-android-arm-eabi@4.20.0': @@ -1296,6 +1485,11 @@ snapshots: dependencies: acorn: 8.15.0 + '@tybys/wasm-util@0.10.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/estree@1.0.5': {} '@types/node@12.20.55': {} @@ -1610,6 +1804,26 @@ snapshots: outdent@0.5.0: {} + oxc-parser@0.86.0: + dependencies: + '@oxc-project/types': 0.86.0 + optionalDependencies: + '@oxc-parser/binding-android-arm64': 0.86.0 + '@oxc-parser/binding-darwin-arm64': 0.86.0 + '@oxc-parser/binding-darwin-x64': 0.86.0 + '@oxc-parser/binding-freebsd-x64': 0.86.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.86.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.86.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.86.0 + '@oxc-parser/binding-linux-arm64-musl': 0.86.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.86.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.86.0 + '@oxc-parser/binding-linux-x64-gnu': 0.86.0 + '@oxc-parser/binding-linux-x64-musl': 0.86.0 + '@oxc-parser/binding-wasm32-wasi': 0.86.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.86.0 + '@oxc-parser/binding-win32-x64-msvc': 0.86.0 + p-filter@2.1.0: dependencies: p-map: 2.1.0 @@ -1780,6 +1994,9 @@ snapshots: dependencies: typescript: 5.7.2 + tslib@2.8.1: + optional: true + typescript@5.7.2: {} undici-types@5.26.5: diff --git a/src/languages/ts/index.js b/src/languages/ts/index.js index 7bb4f7c..e7b2007 100644 --- a/src/languages/ts/index.js +++ b/src/languages/ts/index.js @@ -1676,7 +1676,7 @@ export default (options = {}) => { context.write('interface '); context.visit(node.id); if (node.typeParameters) context.visit(node.typeParameters); - if (node.extends) { + if (node.extends && node.extends.length) { context.write(' extends '); sequence(context, node.extends, node.body.loc?.start ?? null, false); } diff --git a/test/oxc.test.js b/test/oxc.test.js new file mode 100644 index 0000000..c91033a --- /dev/null +++ b/test/oxc.test.js @@ -0,0 +1,51 @@ +/** @import { BaseNode, Command, Visitors, PrintOptions } from './types' */ +import { expect, test } from 'vitest'; +import oxc from 'oxc-parser'; +import * as acorn from 'acorn'; +import { tsPlugin } from '@sveltejs/acorn-typescript'; +const acornTsx = acorn.Parser.extend(tsPlugin({ jsx: true })); +import { print } from '../src/index.js'; +import tsx from '../src/languages/tsx/index.js'; + +const filename = 'test.ts'; + +/* const full = `import { signal, effect } from "@maverick-js/signals"; +import type { MonacoEditor, createEditor } from "./monacoEditor"; + +interface Props { + value?: string; + className?: string; +}`; */ + +const justTsInterface = `interface Props { + value?: string; + className?: string; +}`; + +const input = justTsInterface; + +/** + * @type {BaseNode} + */ +const { program: programOxc } = oxc.parseSync(filename, input, { + sourceType: 'module', + lang: 'tsx' +}); + +/** + * @type {BaseNode} + */ +const program = acornTsx.parse(input, { + ecmaVersion: 'latest', + sourceType: 'module' +}); + +/* test('OXC vs Acorn AST body', () => { + expect(programOxc.body[0]).toMatchObject(program.body[0]); +}); */ + +console.log(programOxc.body, program.body); + +test('OXC vs Acorn printed code', () => { + expect(print(programOxc, tsx()).code).toEqual(print(program, tsx()).code); +}); From e2f67af9138ea773eac2ef49ab49470f550820c6 Mon Sep 17 00:00:00 2001 From: Lukas Bombach Date: Mon, 1 Sep 2025 22:12:07 +0200 Subject: [PATCH 2/3] rm dev files --- package.json | 1 - pnpm-lock.yaml | 217 ----------------------------------------------- test/oxc.test.js | 51 ----------- 3 files changed, 269 deletions(-) delete mode 100644 test/oxc.test.js diff --git a/package.json b/package.json index bffa6a0..0fa59ac 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "@vitest/ui": "^2.1.1", "acorn": "^8.15.0", "dts-buddy": "^0.6.2", - "oxc-parser": "0.86.0", "prettier": "^3.0.3", "typescript": "^5.7.2", "vitest": "^2.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a3c9bb4..53807dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,9 +30,6 @@ importers: dts-buddy: specifier: ^0.6.2 version: 0.6.2(typescript@5.7.2) - oxc-parser: - specifier: 0.86.0 - version: 0.86.0 prettier: specifier: ^3.0.3 version: 3.3.3 @@ -107,15 +104,6 @@ packages: '@changesets/write@0.3.2': resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -281,9 +269,6 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@napi-rs/wasm-runtime@1.0.3': - resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -296,98 +281,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxc-parser/binding-android-arm64@0.86.0': - resolution: {integrity: sha512-BfNFEWpRo4gqLHKvRuQmhbPGeJqB1Ka/hsPhKf1imAojwUcf/Dr/yRkZBuEi2yc1LWBjApKYJEqpsBUmtqSY1Q==} - engines: {node: '>=20.0.0'} - cpu: [arm64] - os: [android] - - '@oxc-parser/binding-darwin-arm64@0.86.0': - resolution: {integrity: sha512-gRSnEHcyNEfLdNj6v8XKcuHUaZnRpH2lOZFztuGEi23ENydPOQVEtiZYexuHOTeaLGgzw+93TgB4n/YkjYodug==} - engines: {node: '>=20.0.0'} - cpu: [arm64] - os: [darwin] - - '@oxc-parser/binding-darwin-x64@0.86.0': - resolution: {integrity: sha512-6mdymm8i+VpLTJP19D3PSFumMmAyfhhhIRWcRHsc0bL7CSZjCWbvRb00ActKrGKWtsol/A/KKgqglJwpvjlzOA==} - engines: {node: '>=20.0.0'} - cpu: [x64] - os: [darwin] - - '@oxc-parser/binding-freebsd-x64@0.86.0': - resolution: {integrity: sha512-mc2xYRPxhzFg4NX1iqfIWP+8ORtXiNpAkaomNDepegQFlIFUmrESa3IJrKJ/4vg77Tbti7omHbraOqwdTk849g==} - engines: {node: '>=20.0.0'} - cpu: [x64] - os: [freebsd] - - '@oxc-parser/binding-linux-arm-gnueabihf@0.86.0': - resolution: {integrity: sha512-LZzapjFhwGQMKefcFsn3lJc/mTY37fBlm0jjEvETgNCyd5pH4gDwOcrp/wZHAz2qw5uLWOHaa69I6ci5lBjJgA==} - engines: {node: '>=20.0.0'} - cpu: [arm] - os: [linux] - - '@oxc-parser/binding-linux-arm-musleabihf@0.86.0': - resolution: {integrity: sha512-/rhJMpng7/Qgn8hE4sigxTRb04+zdO0K1kfAMZ3nONphk5r2Yk2RjyEpLLz17adysCyQw/KndaMHNv8GR8VMNg==} - engines: {node: '>=20.0.0'} - cpu: [arm] - os: [linux] - - '@oxc-parser/binding-linux-arm64-gnu@0.86.0': - resolution: {integrity: sha512-IXEZnk6O0zJg5gDn1Zvt5Qx62Z3E+ewrKwPgMfExqnNCLq+Ix2g7hQypevm/S6qxVgyz5HbiW+a/5ziMFXTCJQ==} - engines: {node: '>=20.0.0'} - cpu: [arm64] - os: [linux] - - '@oxc-parser/binding-linux-arm64-musl@0.86.0': - resolution: {integrity: sha512-QG7DUVZ/AtBaUGMhgToB4glOdq0MGAEYU1MJQpNB5HqiEcOpteF9Pd+oPfscj2zrGPd47KNyljtJRBKJr6Ut0w==} - engines: {node: '>=20.0.0'} - cpu: [arm64] - os: [linux] - - '@oxc-parser/binding-linux-riscv64-gnu@0.86.0': - resolution: {integrity: sha512-smz+J6riX2du2lp0IKeZSaOBIhhoE2N/L1IQdOLCpzB0ikjCDBoyNKdDM7te8ZDq3KDnRmJChmhQGd8P1/LGBQ==} - engines: {node: '>=20.0.0'} - cpu: [riscv64] - os: [linux] - - '@oxc-parser/binding-linux-s390x-gnu@0.86.0': - resolution: {integrity: sha512-vas1BOMWVdicuimmi5Y+xPj3csaYQquVA45Im9a/DtVsypVeh8RWYXBMO1qJNM5Fg5HD0QvYNqxvftx3c+f5pg==} - engines: {node: '>=20.0.0'} - cpu: [s390x] - os: [linux] - - '@oxc-parser/binding-linux-x64-gnu@0.86.0': - resolution: {integrity: sha512-3Fsi+JA3NwdZdrpC6AieOP48cuBrq0q59JgnR0mfoWfr9wHrbn2lt8EEubrj6EXpBUmu1Zii7S9NNRC6fl/d+w==} - engines: {node: '>=20.0.0'} - cpu: [x64] - os: [linux] - - '@oxc-parser/binding-linux-x64-musl@0.86.0': - resolution: {integrity: sha512-89/d43EW76wJagz8u5zcKW8itB2rnS/uN7un5APb8Ebme8TePBwDyxo64J6oY5rcJYkfJ6lEszSF/ovicsNVPw==} - engines: {node: '>=20.0.0'} - cpu: [x64] - os: [linux] - - '@oxc-parser/binding-wasm32-wasi@0.86.0': - resolution: {integrity: sha512-gRrGmE2L27stNMeiAucy/ffHF9VjYr84MizuJzSYnnKmd5WXf3HelNdd0UYSJnpb7APBuyFSN2Oato+Qb6yAFw==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@oxc-parser/binding-win32-arm64-msvc@0.86.0': - resolution: {integrity: sha512-parTnpNviJYR3JIFLseDGip1KkYbhWLeuZG9OMek62gr6Omflddoytvb17s+qODoZqFAVjvuOmVipDdjTl9q3Q==} - engines: {node: '>=20.0.0'} - cpu: [arm64] - os: [win32] - - '@oxc-parser/binding-win32-x64-msvc@0.86.0': - resolution: {integrity: sha512-FTso24eQh3vPTe/SOTf0/RXfjJ13tsk5fw728fm+z5y6Rb+mmEBfyVT6XxyGhEwtdfnRSZawheX74/9caI1etw==} - engines: {node: '>=20.0.0'} - cpu: [x64] - os: [win32] - - '@oxc-project/types@0.86.0': - resolution: {integrity: sha512-bJ57vWNQnOnUe5ZxUkrWpLyExxqb0BoyQ+IRmI/V1uxHbBNBzFGMIjKIf5ECFsgS0KgUUl8TM3a4xpeAtAnvIA==} - '@polka/url@1.0.0-next.25': resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} @@ -476,9 +369,6 @@ packages: peerDependencies: acorn: ^8.9.0 - '@tybys/wasm-util@0.10.0': - resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} - '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -792,10 +682,6 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - oxc-parser@0.86.0: - resolution: {integrity: sha512-v9+uomgqyLSxlq3qlaMqJJtXg2+rUsa368p/zkmgi5OMGmcZAtZt5GIeSVFF84iNET+08Hdx/rUtd/FyIdfNFQ==} - engines: {node: '>=20.0.0'} - p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -1003,9 +889,6 @@ packages: peerDependencies: typescript: '>=4.2.0' - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - typescript@5.7.2: resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} @@ -1240,22 +1123,6 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 - '@emnapi/core@1.5.0': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.5.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.1.0': - dependencies: - tslib: 2.8.1 - optional: true - '@esbuild/aix-ppc64@0.21.5': optional: true @@ -1363,13 +1230,6 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@napi-rs/wasm-runtime@1.0.3': - dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 - '@tybys/wasm-util': 0.10.0 - optional: true - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1382,55 +1242,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.18.0 - '@oxc-parser/binding-android-arm64@0.86.0': - optional: true - - '@oxc-parser/binding-darwin-arm64@0.86.0': - optional: true - - '@oxc-parser/binding-darwin-x64@0.86.0': - optional: true - - '@oxc-parser/binding-freebsd-x64@0.86.0': - optional: true - - '@oxc-parser/binding-linux-arm-gnueabihf@0.86.0': - optional: true - - '@oxc-parser/binding-linux-arm-musleabihf@0.86.0': - optional: true - - '@oxc-parser/binding-linux-arm64-gnu@0.86.0': - optional: true - - '@oxc-parser/binding-linux-arm64-musl@0.86.0': - optional: true - - '@oxc-parser/binding-linux-riscv64-gnu@0.86.0': - optional: true - - '@oxc-parser/binding-linux-s390x-gnu@0.86.0': - optional: true - - '@oxc-parser/binding-linux-x64-gnu@0.86.0': - optional: true - - '@oxc-parser/binding-linux-x64-musl@0.86.0': - optional: true - - '@oxc-parser/binding-wasm32-wasi@0.86.0': - dependencies: - '@napi-rs/wasm-runtime': 1.0.3 - optional: true - - '@oxc-parser/binding-win32-arm64-msvc@0.86.0': - optional: true - - '@oxc-parser/binding-win32-x64-msvc@0.86.0': - optional: true - - '@oxc-project/types@0.86.0': {} - '@polka/url@1.0.0-next.25': {} '@rollup/rollup-android-arm-eabi@4.20.0': @@ -1485,11 +1296,6 @@ snapshots: dependencies: acorn: 8.15.0 - '@tybys/wasm-util@0.10.0': - dependencies: - tslib: 2.8.1 - optional: true - '@types/estree@1.0.5': {} '@types/node@12.20.55': {} @@ -1804,26 +1610,6 @@ snapshots: outdent@0.5.0: {} - oxc-parser@0.86.0: - dependencies: - '@oxc-project/types': 0.86.0 - optionalDependencies: - '@oxc-parser/binding-android-arm64': 0.86.0 - '@oxc-parser/binding-darwin-arm64': 0.86.0 - '@oxc-parser/binding-darwin-x64': 0.86.0 - '@oxc-parser/binding-freebsd-x64': 0.86.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.86.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.86.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.86.0 - '@oxc-parser/binding-linux-arm64-musl': 0.86.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.86.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.86.0 - '@oxc-parser/binding-linux-x64-gnu': 0.86.0 - '@oxc-parser/binding-linux-x64-musl': 0.86.0 - '@oxc-parser/binding-wasm32-wasi': 0.86.0 - '@oxc-parser/binding-win32-arm64-msvc': 0.86.0 - '@oxc-parser/binding-win32-x64-msvc': 0.86.0 - p-filter@2.1.0: dependencies: p-map: 2.1.0 @@ -1994,9 +1780,6 @@ snapshots: dependencies: typescript: 5.7.2 - tslib@2.8.1: - optional: true - typescript@5.7.2: {} undici-types@5.26.5: diff --git a/test/oxc.test.js b/test/oxc.test.js deleted file mode 100644 index c91033a..0000000 --- a/test/oxc.test.js +++ /dev/null @@ -1,51 +0,0 @@ -/** @import { BaseNode, Command, Visitors, PrintOptions } from './types' */ -import { expect, test } from 'vitest'; -import oxc from 'oxc-parser'; -import * as acorn from 'acorn'; -import { tsPlugin } from '@sveltejs/acorn-typescript'; -const acornTsx = acorn.Parser.extend(tsPlugin({ jsx: true })); -import { print } from '../src/index.js'; -import tsx from '../src/languages/tsx/index.js'; - -const filename = 'test.ts'; - -/* const full = `import { signal, effect } from "@maverick-js/signals"; -import type { MonacoEditor, createEditor } from "./monacoEditor"; - -interface Props { - value?: string; - className?: string; -}`; */ - -const justTsInterface = `interface Props { - value?: string; - className?: string; -}`; - -const input = justTsInterface; - -/** - * @type {BaseNode} - */ -const { program: programOxc } = oxc.parseSync(filename, input, { - sourceType: 'module', - lang: 'tsx' -}); - -/** - * @type {BaseNode} - */ -const program = acornTsx.parse(input, { - ecmaVersion: 'latest', - sourceType: 'module' -}); - -/* test('OXC vs Acorn AST body', () => { - expect(programOxc.body[0]).toMatchObject(program.body[0]); -}); */ - -console.log(programOxc.body, program.body); - -test('OXC vs Acorn printed code', () => { - expect(print(programOxc, tsx()).code).toEqual(print(program, tsx()).code); -}); From f8132c602eeff298f00ce15bb640dfdc73065d36 Mon Sep 17 00:00:00 2001 From: Lukas Bombach Date: Mon, 1 Sep 2025 22:36:28 +0200 Subject: [PATCH 3/3] Add changeset for TSInterfaceDeclaration compatibility --- .../TSInterfaceDeclaration-compatibility-with-oxc-parser.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/TSInterfaceDeclaration-compatibility-with-oxc-parser.md diff --git a/.changeset/TSInterfaceDeclaration-compatibility-with-oxc-parser.md b/.changeset/TSInterfaceDeclaration-compatibility-with-oxc-parser.md new file mode 100644 index 0000000..bd77fd7 --- /dev/null +++ b/.changeset/TSInterfaceDeclaration-compatibility-with-oxc-parser.md @@ -0,0 +1,5 @@ +--- +"esrap": patch +--- + +`TSInterfaceDeclaration` compatibility with oxc parser