diff --git a/doc/api/deprecations.md b/doc/api/deprecations.md index 763c5792650f32..734929240ce743 100644 --- a/doc/api/deprecations.md +++ b/doc/api/deprecations.md @@ -3535,12 +3535,15 @@ The [`util.types.isWebAssemblyCompiledModule`][] API is deprecated. Please use -Type: Documentation-only +Type: Runtime The [`dirent.path`][] is deprecated due to its lack of consistency across release lines. Please use [`dirent.parentPath`][] instead. diff --git a/doc/api/fs.md b/doc/api/fs.md index 95afa01cbdec7b..0f9d7e1636f77b 100644 --- a/doc/api/fs.md +++ b/doc/api/fs.md @@ -6658,13 +6658,17 @@ added: - v20.1.0 - v18.17.0 deprecated: REPLACEME +changes: + - version: REPLACEME + pr-url: https://github.com/nodejs/node/pull/51050 + description: Accessing this property emits a warning. It is now read-only. --> > Stability: 0 - Deprecated: Use [`dirent.parentPath`][] instead. * {string} -Alias for `dirent.parentPath`. +Alias for `dirent.parentPath`. Read-only. ### Class: `fs.FSWatcher` diff --git a/lib/internal/fs/utils.js b/lib/internal/fs/utils.js index fa2851a244b5ee..297752499ecae0 100644 --- a/lib/internal/fs/utils.js +++ b/lib/internal/fs/utils.js @@ -12,6 +12,7 @@ const { NumberIsFinite, MathMin, MathRound, + ObjectDefineProperty, ObjectIs, ObjectSetPrototypeOf, ReflectApply, @@ -47,6 +48,7 @@ const { isUint8Array, } = require('internal/util/types'); const { + deprecate, kEmptyObject, once, } = require('internal/util'); @@ -166,7 +168,6 @@ class Dirent { constructor(name, type, path) { this.name = name; this.parentPath = path; - this.path = path; this[kType] = type; } @@ -215,6 +216,15 @@ for (const name of ReflectOwnKeys(Dirent.prototype)) { }; } +ObjectDefineProperty(Dirent.prototype, 'path', { + __proto__: null, + get: deprecate(function() { + return this.parentPath; + }, 'dirent.path is deprecated in favor of dirent.parentPath', 'DEP0178'), + configurable: true, + enumerable: false, +}); + function copyObject(source) { const target = {}; for (const key in source) diff --git a/test/parallel/test-fs-utils-get-dirents.js b/test/parallel/test-fs-utils-get-dirents.js index 9c53a4146a6768..dfc851090b269d 100644 --- a/test/parallel/test-fs-utils-get-dirents.js +++ b/test/parallel/test-fs-utils-get-dirents.js @@ -88,6 +88,11 @@ const filename = 'foo'; common.mustCall((err, dirent) => { assert.strictEqual(err, null); assert.strictEqual(dirent.name, filenameBuffer); + common.expectWarning( + 'DeprecationWarning', + 'dirent.path is deprecated in favor of dirent.parentPath', + 'DEP0178'); + assert.deepStrictEqual(dirent.path, Buffer.from(tmpdir.resolve(`${filename}/`))); }, )); }