You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by te...@apache.org on 2026/05/01 14:46:03 UTC
(opendal) 01/01: feat(bindings/nodejs): Add presignDelete method for parity with presignRead/Write/Stat
This is an automated email from the ASF dual-hosted git repository.
TennyZhuang pushed a commit to branch agent-nodejs-presign-delete
in repository https://gitbox.apache.org/repos/asf/opendal.git
commit 2c32a0717d6da22d1f87ddbb987ec1bd91dffa1d
Author: tianyizhuang <ti...@tianyizhuangs-Mac-mini.local>
AuthorDate: Fri May 1 21:52:05 2026 +0800
feat(bindings/nodejs): Add presignDelete method for parity with presignRead/Write/Stat
Add the missing presign_delete capability to the Node.js binding, matching
the existing flat presign method pattern (presignRead/presignWrite/presignStat).
- bindings/nodejs/src/lib.rs: Add presign_delete napi method
- bindings/nodejs/generated.d.ts: Auto-generated TypeScript declaration
- Intentionally flat only (no options variant) for sibling parity
- No Capability getter added (deferred to uniform sweep)
Closes: apache/opendal issue for presign_delete parity
Scope: Node.js binding only
AI-assisted: DeepSeek v4-pro, reviewed by OpenDAL regression team
---
bindings/nodejs/generated.d.ts | 16 ++++++++++++++++
bindings/nodejs/src/lib.rs | 23 +++++++++++++++++++++++
2 files changed, 39 insertions(+)
diff --git a/bindings/nodejs/generated.d.ts b/bindings/nodejs/generated.d.ts
index 77ddf0705..53d7a1271 100644
--- a/bindings/nodejs/generated.d.ts
+++ b/bindings/nodejs/generated.d.ts
@@ -824,6 +824,22 @@ export declare class Operator {
* ```
*/
presignStat(path: string, expires: number): Promise<PresignedRequest>
+ /**
+ * Get a presigned request for delete.
+ *
+ * Unit of `expires` is seconds.
+ *
+ * ### Example
+ *
+ * ```javascript
+ * const req = await op.presignDelete(path, parseInt(expires));
+ *
+ * console.log("method: ", req.method);
+ * console.log("url: ", req.url);
+ * console.log("headers: ", req.headers);
+ * ```
+ */
+ presignDelete(path: string, expires: number): Promise<PresignedRequest>
/** Add a layer to this operator. */
layer(layer: ExternalObject<Layer>): Operator
}
diff --git a/bindings/nodejs/src/lib.rs b/bindings/nodejs/src/lib.rs
index e56380e0a..85260382d 100644
--- a/bindings/nodejs/src/lib.rs
+++ b/bindings/nodejs/src/lib.rs
@@ -794,6 +794,29 @@ impl Operator {
.map_err(format_napi_error)?;
Ok(PresignedRequest::new(res))
}
+
+ /// Get a presigned request for delete.
+ ///
+ /// Unit of `expires` is seconds.
+ ///
+ /// ### Example
+ ///
+ /// ```javascript
+ /// const req = await op.presignDelete(path, parseInt(expires));
+ ///
+ /// console.log("method: ", req.method);
+ /// console.log("url: ", req.url);
+ /// console.log("headers: ", req.headers);
+ /// ```
+ #[napi]
+ pub async fn presign_delete(&self, path: String, expires: u32) -> Result<PresignedRequest> {
+ let res = self
+ .async_op
+ .presign_delete(&path, Duration::from_secs(expires as u64))
+ .await
+ .map_err(format_napi_error)?;
+ Ok(PresignedRequest::new(res))
+ }
}
/// Entry returned by Lister or BlockingLister to represent a path, and it's a relative metadata.