diff --git a/package.json b/package.json index 2bfa58d..28e7c09 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "clsx": "^2.1.1", "fflate": "^0.8.2", "monaco-editor": "^0.52.2", + "oxc-parser": "^0.56.5", "radix-vue": "^1.9.15", "tailwind-merge": "^3.0.1", "vue": "^3.5.13" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc2156a..cc80d86 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: monaco-editor: specifier: ^0.52.2 version: 0.52.2 + oxc-parser: + specifier: ^0.56.5 + version: 0.56.5 radix-vue: specifier: ^1.9.15 version: 1.9.17(vue@3.5.13(typescript@5.8.2)) @@ -133,6 +136,15 @@ packages: resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} engines: {node: '>=6.9.0'} + '@emnapi/core@1.3.1': + resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} + + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + '@es-joy/jsdoccomment@0.49.0': resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} engines: {node: '>=16'} @@ -413,6 +425,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@napi-rs/wasm-runtime@0.2.7': + resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -425,6 +440,68 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-parser/binding-darwin-arm64@0.56.5': + resolution: {integrity: sha512-rj4WZqQVJQgLnGnDu2ciIOC5SqcBPc4x11RN0NwuedSGzny5mtBdNVLwt0+8iB15lIjrOKg5pjYJ8GQVPca5HA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.56.5': + resolution: {integrity: sha512-Rr7aMkqcxGIM6fgkpaj9SJj0u1O1g+AT7mJwmdi5PLSQRPR4CkDKfztEnAj5k+d2blWvh9nPZH8G0OCwxIHk1Q==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.56.5': + resolution: {integrity: sha512-jcFCThrWUt5k1GM43tdmI1m2dEnWUPPHHTWKBJbZBXzXLrJJzkqv5OU87Spf1004rYj9swwpa13kIldFwMzglA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.56.5': + resolution: {integrity: sha512-zo/9RDgWvugKxCpHHcAC5EW0AqoEvODJ4Iv4aT1Xonv6kcydbyPSXJBQhhZUvTXTAFIlQKl6INHl+Xki9Qs3fw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-arm64-musl@0.56.5': + resolution: {integrity: sha512-SCIqrL5apVbrtMoqOpKX/Ez+c46WmW0Tyhtu+Xby281biH+wYu70m+fux9ZsGmbHc2ojd4FxUcaUdCZtb5uTOQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-x64-gnu@0.56.5': + resolution: {integrity: sha512-I2mpX35NWo83hay4wrnzFLk3VuGK1BBwHaqvEdqsCode8iG8slYJRJPICVbCEWlkR3rotlTQ+608JcRU0VqZ5Q==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-linux-x64-musl@0.56.5': + resolution: {integrity: sha512-xfzUHGYOh3PGWZdBuY5r1czvE8EGWPAmhTWHqkw3/uAfUVWN/qrrLjMojiaiWyUgl/9XIFg05m5CJH9dnngh5Q==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-wasm32-wasi@0.56.5': + resolution: {integrity: sha512-+z3Ofmc1v5kcu8fXgG5vn7T1f52P47ceTTmTXsm5HPY7rq5EMYRUaBnxH6cesXwY1OVVCwYlIZbCiy8Pm1w8zQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.56.5': + resolution: {integrity: sha512-pRg8QrbMh8PgnXBreiONoJBR306u+JN19BXQC7oKIaG4Zxt9Mn8XIyuhUv3ytqjLudSiG2ERWQUoCGLs+yfW0A==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.56.5': + resolution: {integrity: sha512-VALZNcuyw/6rwsxOACQ2YS6rey2d/ym4cNfXqJrHB/MZduAPj4xvij72gHGu3Ywm31KVGLVWk/mrMRiM9CINcA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.56.5': + resolution: {integrity: sha512-skY3kOJwp22W4RkaadH1hZ3hqFHjkRrIIE0uQ4VUg+/Chvbl+2pF+B55IrIk2dgsKXS57YEUsJuN6I6s4rgFjA==} + '@pkgr/core@0.1.1': resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -577,6 +654,9 @@ packages: peerDependencies: vue: ^2.7.0 || ^3.0.0 + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -1818,6 +1898,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + oxc-parser@0.56.5: + resolution: {integrity: sha512-MNT32sqiTFeSbQZP2WZIRQ/mlIpNNq4sua+/4hBG4qT5aef2iQe+1/BjezZURPlvucZeSfN1Y6b60l7OgBdyUA==} + engines: {node: '>=14.0.0'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2391,6 +2475,22 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@emnapi/core@1.3.1': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.8.1 + optional: true + '@es-joy/jsdoccomment@0.49.0': dependencies: comment-parser: 1.4.1 @@ -2624,6 +2724,13 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@napi-rs/wasm-runtime@0.2.7': + dependencies: + '@emnapi/core': 1.3.1 + '@emnapi/runtime': 1.3.1 + '@tybys/wasm-util': 0.9.0 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2636,6 +2743,40 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 + '@oxc-parser/binding-darwin-arm64@0.56.5': + optional: true + + '@oxc-parser/binding-darwin-x64@0.56.5': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.56.5': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.56.5': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.56.5': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.56.5': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.56.5': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.56.5': + dependencies: + '@napi-rs/wasm-runtime': 0.2.7 + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.56.5': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.56.5': + optional: true + + '@oxc-project/types@0.56.5': {} + '@pkgr/core@0.1.1': {} '@polka/url@1.0.0-next.28': {} @@ -2786,6 +2927,11 @@ snapshots: '@tanstack/virtual-core': 3.13.2 vue: 3.5.13(typescript@5.8.2) + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 @@ -4399,6 +4545,21 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + oxc-parser@0.56.5: + dependencies: + '@oxc-project/types': 0.56.5 + optionalDependencies: + '@oxc-parser/binding-darwin-arm64': 0.56.5 + '@oxc-parser/binding-darwin-x64': 0.56.5 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.56.5 + '@oxc-parser/binding-linux-arm64-gnu': 0.56.5 + '@oxc-parser/binding-linux-arm64-musl': 0.56.5 + '@oxc-parser/binding-linux-x64-gnu': 0.56.5 + '@oxc-parser/binding-linux-x64-musl': 0.56.5 + '@oxc-parser/binding-wasm32-wasi': 0.56.5 + '@oxc-parser/binding-win32-arm64-msvc': 0.56.5 + '@oxc-parser/binding-win32-x64-msvc': 0.56.5 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 diff --git a/src/composables/oxc.ts b/src/composables/oxc.ts index 6f8ae32..01d3823 100644 --- a/src/composables/oxc.ts +++ b/src/composables/oxc.ts @@ -1,5 +1,6 @@ import initWasm, { Oxc, type OxcOptions } from '@oxc/oxc_wasm' import { createGlobalState } from '@vueuse/core' +import { parseAsync } from 'oxc-parser' import { computed, ref, @@ -18,6 +19,18 @@ async function initialize(): Promise { return new Oxc() } +parseAsync( + 'test.tsx', + ` + const a = 1 + const b: number = 2 + const c = a + b + console.log(c) +`, +).then((ast) => { + console.log(ast) +}) + export const loadingOxc = ref(true) export const oxcPromise = initialize().finally(() => (loadingOxc.value = false)) diff --git a/vite.config.ts b/vite.config.ts index a16980a..67cb3c5 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,6 +5,17 @@ import { defineConfig } from 'vite' // https://vitejs.dev/config/ export default defineConfig({ + optimizeDeps: { + esbuildOptions: { + target: 'esnext', + }, + // Suppress the warning: The file does not exist at "oxc-playground/node_modules/.vite/deps/@oxc-parser/binding-wasm32-wasi/wasi-worker-browser.mjs?worker_file&type=module" which is in the optimize deps directory. The dependency might be incompatible with the dep optimizer. Try adding it to `optimizeDeps.exclude`. + // Need to resolve + exclude: ['@oxc-parser/binding-wasm32-wasi'], + }, + build: { + target: 'esnext', + }, resolve: { alias: { '~': path.resolve(__dirname, './src'), @@ -15,5 +26,19 @@ export default defineConfig({ allow: [__dirname, '../oxc/npm/oxc-wasm'], }, }, - plugins: [Vue(), UnoCSS()], + plugins: [ + Vue(), + UnoCSS(), + { + name: 'configure-response-headers', + enforce: 'pre', + configureServer: (server) => { + server.middlewares.use((_req, res, next) => { + res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp') + res.setHeader('Cross-Origin-Opener-Policy', 'same-origin') + next() + }) + }, + }, + ], })