On Windows:
const fs = require('fs');
fs.symlinkSync(Buffer.from('target'), 'link');
Always happens on Windows since 14.5.0, it may be necessary to enable symlink support on Windows (I'm not 100% sure how that all works). Does not happen on Linux or macOS.
No error, and the symlink should be created. Buffer is listed as a valid target type.
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received an instance of Buffer
internal/validators.js:121
throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
^
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received an instance of Buffer
at validateString (internal/validators.js:121:11)
at Object.isAbsolute (path.js:353:5)
at preprocessSymlinkDestination (internal/fs/utils.js:345:18)
at Object.symlinkSync (fs.js:1118:19)
at Object.<anonymous> (C:\Users\travis\build\AlexanderOMara\issue-node-symlink-buffer-windows\main.js:5:4)
at Module._compile (internal/modules/cjs/loader.js:1236:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1257:10)
at Module.load (internal/modules/cjs/loader.js:1085:32)
at Function.Module._load (internal/modules/cjs/loader.js:950:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12) {
code: 'ERR_INVALID_ARG_TYPE'
}
I created a test repo which is tested via Travis CI.
On a side-note, the path argument can be a Buffer, it's just the target argument with the issue.
What do you see instead?
Could you share the full stack trace?
Sure! Added the stack trace from Travis.
@nodejs/fs
My guess is that this is the commit that created the issue, since path.isAbsolute (and also path.toNamespacedPath) expect a string:
https://github.com/nodejs/node/commit/a4e273baf43910ba9e5c66949e56b919f8614fb9
There might also be a similar issue right above it if type is junction, depending on how path.resolve handles things that are not strings.
It also affected v12.18.3, please release the patch to v12 too. Thx.