garronej / denoify

🦕For NPM module authors that would like to support Deno but do not want to write and maintain a port.
http://denoify.land
MIT License
917 stars 21 forks source link

feature request: `--verbose` mode #117

Open scarf005 opened 1 year ago

scarf005 commented 1 year ago

it would be great to have a --verbose debug output so it would be possible to profile bottlenecks when denoifying node projects. for example, it took 17~25 seconds to convert this 800 loc program with 2 dependencies, which i believe to be bottlenecked by my configuration.

Details ``` $ tokei src/* =============================================================================== Language Files Lines Code Comments Blanks =============================================================================== TypeScript 5 789 684 19 86 =============================================================================== Total 5 789 684 19 86 =============================================================================== ``` ```sh $ time pnpm denoify > ts-rest-hono@0.0.11 denoify /home/scarf/repo/etc/one-time-contribution/ts-rest-hono > rimraf deno_dist && denoify && rimraf --glob 'deno_dist/**/*.test.ts' Denoify is reading sources files from src Configurations from /home/scarf/repo/etc/one-time-contribution/ts-rest-hono/denoify.config.js are used Deno distribution will be generated at deno_dist ________________________________________________________ Executed in 17.93 secs fish external usr time 1.74 secs 260.00 micros 1.74 secs sys time 0.34 secs 96.00 micros 0.34 secs ``` ```js $ cat denoify.config.js // @ts-check /** @type { import('denoify/lib/config/parseParams').DenoifyParams } */ const config = { out: 'deno_dist', index: './src/index.ts', ports: { zod: 'https://deno.land/x/zod/mod.ts', hono: 'https://deno.land/x/hono/mod.ts', }, } module.exports = config ```
garronej commented 1 year ago

I concur with the suggestion of introducing a --verbose mode. For now, to track the duration, you can insert the following line within the Denoify distribution:

console.log(`Duration: ${Date.now() - start}`);

Since it's transpiled to ES2021, the JavaScript remains relatively readable.

Regarding potential performance bottlenecks, I believe the issue might be located here: denoifySingleFile.ts

For enhancing performance and flexibility, I should transition to using grubber. This would offer a superior alternative to regular expressions without resorting to an AST, which might introduce frequent breaking changes.

scarf005 commented 1 year ago

I see. Also, would it be possible for denoify to transform files concurrently? Using asynchronous fs functions with Promise.all could improve performance if IO also bottlenecks.

https://github.com/garronej/denoify/blob/5ad3bb2e08d59317f1132e9aeb9d469e60fd72ef/src/lib/denoify.ts#L150-L158