Title: Make Buffer.prototype methods callable with Uint8Array instances · Issue #56577 · nodejs/node · GitHub
Open Graph Title: Make Buffer.prototype methods callable with Uint8Array instances · Issue #56577 · nodejs/node
X Title: Make Buffer.prototype methods callable with Uint8Array instances · Issue #56577 · nodejs/node
Description: What is the problem this feature will solve? From the docs: Node.js APIs accept plain Uint8Arrays wherever Buffers are supported as well. One notable place where plain Uint8Arrays are not always accepted is the methods on the Buffer subc...
Open Graph Description: What is the problem this feature will solve? From the docs: Node.js APIs accept plain Uint8Arrays wherever Buffers are supported as well. One notable place where plain Uint8Arrays are not always ac...
X Description: What is the problem this feature will solve? From the docs: Node.js APIs accept plain Uint8Arrays wherever Buffers are supported as well. One notable place where plain Uint8Arrays are not always ac...
Opengraph URL: https://github.com/nodejs/node/issues/56577
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Make Buffer.prototype methods callable with Uint8Array instances","articleBody":"### What is the problem this feature will solve?\n\nFrom the docs:\n\n\u003e Node.js APIs accept plain `Uint8Array`s wherever `Buffer`s are supported as well.\n\nOne notable place where plain Uint8Arrays are not _always_ accepted is the methods on the Buffer subclass. Take the method `buf.readIntLE(offset, byteLength)`:\n\n```js\nBuffer.prototype.readIntLE.call(Uint8Array.of(1, 0, 0, 0, 0), 0, 3);\n// 1\n\nBuffer.prototype.readIntLE.call(Uint8Array.of(1, 0, 0, 0, 0), 0, 4) \n// Uncaught TypeError: this.readInt32LE is not a function\n// at Uint8Array.readIntLE (node:internal/buffer:349:17)\n```\n\nDepending on the `byteLength` given, the method will respond correctly or throw a `TypeError` if it happens to be written using a code path that uses an internal method found only on the Buffer prototype. \n\nAs a library author, I would also like to easily accept Uint8Arrays wherever Buffers are accepted and not spend time converting the input to a Buffer instance to get useful byte utilities to work on both possible inputs.\n\n### What is the feature you are proposing to solve the problem?\n\nI propose to make the few code paths that rely on internal methods invoke those functions in a way that doesn't require them to be defined on the currently bound `this` value's prototype.\n\nFor example:\n```js\nreturn this.readInt32LE(offset);\n```\nbecomes\n```js\nreturn FunctionPrototypeCall(readInt32LE, this, offset);\n```\n\nAnd add coverage for existing and future methods to maintain this contract.\n\n\n### What alternatives have you considered?\n\nA couple but less desirable alternatives:\n- Convert input by invoking `Buffer.from(ArrayBuffer, byteOffset, byteLength)`\n- Reimplement the methods in library to work with either input","author":{"url":"https://github.com/nbbeeken","@type":"Person","name":"nbbeeken"},"datePublished":"2025-01-13T02:19:52.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":4},"url":"https://github.com/56577/node/issues/56577"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:8444f0b8-b24b-dad2-14a4-cba80d995563 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8860:2E7826:130488C:1A87B5E:6A4BFBF5 |
| html-safe-nonce | 72f19400c03d6b2a1029e3ca9ca8a34b82fd40be3bc347cd65cc625c06807389 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4ODYwOjJFNzgyNjoxMzA0ODhDOjFBODdCNUU6NkE0QkZCRjUiLCJ2aXNpdG9yX2lkIjoiODAwNTUyNDMwMzY5MTY0Mzg5MyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | f6b5eb75c0aeb0f87cdf28e138cae1ceb192ef09e057377ff98acdd33a7c1dfa |
| hovercard-subject-tag | issue:2782865163 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/nodejs/node/56577/issue_layout |
| twitter:image | https://opengraph.githubassets.com/6194235dcb6cd50adbd58cf98fe67d9b41c50dffefdaf2987ffe4f2b8ee749ab/nodejs/node/issues/56577 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/6194235dcb6cd50adbd58cf98fe67d9b41c50dffefdaf2987ffe4f2b8ee749ab/nodejs/node/issues/56577 |
| og:image:alt | What is the problem this feature will solve? From the docs: Node.js APIs accept plain Uint8Arrays wherever Buffers are supported as well. One notable place where plain Uint8Arrays are not always ac... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | nbbeeken |
| hostname | github.com |
| expected-hostname | github.com |
| None | 0f5d3ba365b3985d75c32a5957c8635488d58dcf027ae6ae958eee7edaa306a2 |
| turbo-cache-control | no-preview |
| go-import | github.com/nodejs/node git https://github.com/nodejs/node.git |
| octolytics-dimension-user_id | 9950313 |
| octolytics-dimension-user_login | nodejs |
| octolytics-dimension-repository_id | 27193779 |
| octolytics-dimension-repository_nwo | nodejs/node |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 27193779 |
| octolytics-dimension-repository_network_root_nwo | nodejs/node |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 6c542436f9c7282f518e9ec7bc5a3adff20a13fd |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width