-
-
Notifications
You must be signed in to change notification settings - Fork 233
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Fix deno node:process execPath compatibility #1160
Conversation
Co-authored-by: ehmicky <ehmicky@users.noreply.github.com>
Looks good to me! Thanks a lot @w3cj for making this PR and adding information in the PR comment and the code comment. 🙏 Should we merge and release @sindresorhus? |
Go ahead 👍 |
I have a few additional thoughts. First, what Deno is doing here is quite hacky (in their own words). Using an object like this where a string is expected is probably going to create quite many issues: not just that one solved in this PR, but probably with other projects. That being said, I do understand why they might need to do that (that's because I am wondering whether it would be slightly safer to convert those to a string instead? export const safeNormalizeFileUrl = (file, name) => {
const fileString = normalizeFileUrl(normalizeDenoExecPath(file));
// ...
}
// In Deno node:process execPath is a special object, not just a string:
// https://github.com/denoland/deno/blob/f460188e583f00144000aa0d8ade08218d47c3c1/ext/node/polyfills/process.ts#L344
const normalizeDenoExecPath = file => isDenoExecPath(file)
? file.toString()
: file
const isDenoExecPath = file => typeof file !== 'string'
&& file
&& Object.getPrototypeOf(file) === String.prototype; Then, the following syntax needs to be taken into account too: execa(...).pipe(process.execPath, ...) Right now, it relies on the following check, which would not work with Deno: execa/lib/pipe/pipe-arguments.js Lines 59 to 67 in d3a146e
Adding some Finally, we should add automated tests for the following cases:
When Ideally, we would run the automated tests with Deno, but I don't think Deno compatibility is one of our goals right now since that's quite a big requirement for a project like Execa. But that PR is ok though since it is a rather simple fix. If you need help with the automated tests, please let me know. What do you think @w3cj? |
Yeah that seems reasonable. I wasn't quite sure what else in the code base would be effected. I should have some time to work on this later today. |
Updated |
That's perfect, thanks @w3cj! |
Released in |
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.4.1 | ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) #### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.4.1 | ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.4.1 | ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.4.1 | ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.4.1 | ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.4.1 | ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.4.1 | ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.4.1 | ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.5.0 | ## [v9.5.0](sindresorhus/execa@v9.4.1...4d1e55a) ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.5.0 | ## [v9.5.0](sindresorhus/execa@v9.4.1...4d1e55a) ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.5.1 | ## [v9.5.1](sindresorhus/execa@v9.5.0...c8cff27) ## [v9.5.0](sindresorhus/execa@v9.4.1...4d1e55a) ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | execa | 9.4.0 | 9.5.1 | ## [v9.5.1](sindresorhus/execa@v9.5.0...c8cff27) ## [v9.5.0](sindresorhus/execa@v9.4.1...4d1e55a) ## [v9.4.1](https://github.com/sindresorhus/execa/releases/tag/v9.4.1) ##### Bug fixes - Fix using `process.execPath` with Deno. Thanks [@w3cj](https://github.com/w3cj)! ([#1160](sindresorhus/execa#1160))
execa
from Deno the following error occurs:nodePath
defaults toexecPath
fromnode:process
execPath
in the Deno process pollyfill is a special object, not just a string: https://github.com/denoland/deno/blob/main/ext/node/polyfills/process.ts#L344lib/arguments/file-url.js
fails, because execPath is not a stringNote: This issue currently occurs in the Nuxt CLI when trying to run with Deno: denoland/deno#25779
Simple reproduction (run this with Deno v2):