You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by gi...@apache.org on 2023/08/21 16:36:53 UTC
[incubator-opendal] branch gh-pages updated: deploy: 4e1c14cb19f75ebf35848ca40ae03cda5f14ae32
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git
The following commit(s) were added to refs/heads/gh-pages by this push:
new 48b27a9f4 deploy: 4e1c14cb19f75ebf35848ca40ae03cda5f14ae32
48b27a9f4 is described below
commit 48b27a9f411862361e4d4729296b71ab5c416b2a
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Mon Aug 21 16:36:49 2023 +0000
deploy: 4e1c14cb19f75ebf35848ca40ae03cda5f14ae32
---
404.html | 4 +-
.../{054cd2fb.b858ad38.js => 054cd2fb.c902d325.js} | 2 +-
.../{136e1c50.b7b64c50.js => 136e1c50.466d309a.js} | 2 +-
.../{1957547a.cfc0dca6.js => 1957547a.0f8ec7b9.js} | 2 +-
.../{1db64337.e9b8327c.js => 1db64337.9a503283.js} | 2 +-
.../{22d8fa67.0ac591ee.js => 22d8fa67.6e4b0319.js} | 2 +-
.../{2cbf1097.a92bb3eb.js => 2cbf1097.4eaedc2c.js} | 2 +-
.../{434bbc94.b7c87a47.js => 434bbc94.f788fb5c.js} | 2 +-
.../{57a16c1d.a75e23fe.js => 57a16c1d.38948957.js} | 2 +-
assets/js/5a65e608.2e2eb711.js | 1 +
assets/js/5a65e608.60347efa.js | 1 -
.../{62a401e9.6baec00f.js => 62a401e9.57604eb4.js} | 2 +-
assets/js/6eb7fe18.76da508d.js | 1 -
assets/js/6eb7fe18.e0c612bd.js | 1 +
.../{8cc9519e.9f455f82.js => 8cc9519e.3365f55b.js} | 2 +-
.../{8f4159f2.d0fd5e4b.js => 8f4159f2.310ff89e.js} | 2 +-
.../{a0405932.7a070b0c.js => a0405932.82b15615.js} | 2 +-
.../{ab10c306.d7b5ed98.js => ab10c306.58a70519.js} | 2 +-
assets/js/ae4554eb.308a1ad3.js | 1 -
assets/js/ae4554eb.90e1053c.js | 1 +
.../{b56f9725.5153d64b.js => b56f9725.a9644e25.js} | 2 +-
.../{bb5b2057.1cd50d7f.js => bb5b2057.20c1df4d.js} | 2 +-
.../{c6ab695b.b838ffc8.js => c6ab695b.9ed8f02a.js} | 2 +-
.../{cc62039a.06f90f66.js => cc62039a.36aef882.js} | 2 +-
assets/js/d5c31a96.b44a468f.js | 1 -
assets/js/d5c31a96.f720b7bd.js | 1 +
.../{e892cec6.e5885413.js => e892cec6.0cbc194e.js} | 2 +-
.../{f1ca5a39.68cb26d8.js => f1ca5a39.f0dc8708.js} | 2 +-
assets/js/runtime~main.5922cea6.js | 1 -
assets/js/runtime~main.8bf6b716.js | 1 +
blog/archive/index.html | 4 +-
blog/how-opendal-read-data/index.html | 4 +-
blog/index.html | 4 +-
blog/opendal-access-data-freely/index.html | 4 +-
blog/opendal-entered-apache-incubator/index.html | 4 +-
blog/tags/announcement/index.html | 4 +-
blog/tags/index.html | 4 +-
blog/tags/internal/index.html | 4 +-
docs/category/contributing/index.html | 4 +-
docs/category/reference/index.html | 4 +-
docs/category/services/index.html | 4 +-
.../reference/generate_release_note/index.html | 6 +-
docs/contributing/reference/setup_gpg/index.html | 6 +-
docs/contributing/release/index.html | 6 +-
docs/contributing/verify/index.html | 6 +-
docs/lua/classes/opendal.metadata.html | 2 +-
docs/lua/classes/opendal.operator.html | 2 +-
docs/lua/index.html | 2 +-
docs/nodejs/classes/BlockingLister.html | 4 +-
docs/nodejs/classes/Entry.html | 4 +-
docs/nodejs/classes/Lister.html | 4 +-
docs/nodejs/classes/Metadata.html | 18 +-
docs/nodejs/classes/Operator.html | 58 +-
docs/nodejs/interfaces/PresignedRequest.html | 8 +-
docs/overview/index.html | 6 +-
docs/python/opendal.html | 50 +-
docs/python/search.js | 2 +-
.../src/opendal/services/gdrive/backend.rs.html | 300 ++++++++++-
docs/rust/src/opendal/services/gdrive/core.rs.html | 600 ++++++++++++++++++---
.../src/opendal/services/gdrive/writer.rs.html | 110 +++-
docs/services/azblob/index.html | 6 +-
docs/services/azdfs/index.html | 6 +-
docs/services/cos/index.html | 6 +-
docs/services/dashmap/index.html | 6 +-
docs/services/fs/index.html | 6 +-
docs/services/ftp/index.html | 6 +-
docs/services/hdfs/index.html | 6 +-
docs/services/ipfs/index.html | 6 +-
docs/services/ipmfs/index.html | 6 +-
docs/services/memory/index.html | 6 +-
docs/services/oss/index.html | 6 +-
docs/services/redis/index.html | 6 +-
docs/services/rocksdb/index.html | 6 +-
docs/services/s3/index.html | 6 +-
docs/services/sftp/index.html | 6 +-
docs/services/sled/index.html | 6 +-
docs/services/webhdfs/index.html | 6 +-
docs/vision/index.html | 6 +-
download/index.html | 4 +-
index.html | 4 +-
80 files changed, 1095 insertions(+), 311 deletions(-)
diff --git a/404.html b/404.html
index 5e3f12433..e49eb7eaf 100644
--- a/404.html
+++ b/404.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Page Not Found | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/assets/js/054cd2fb.b858ad38.js b/assets/js/054cd2fb.c902d325.js
similarity index 84%
rename from assets/js/054cd2fb.b858ad38.js
rename to assets/js/054cd2fb.c902d325.js
index 0a111f58f..29189275b 100644
--- a/assets/js/054cd2fb.b858ad38.js
+++ b/assets/js/054cd2fb.c902d325.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/136e1c50.b7b64c50.js b/assets/js/136e1c50.466d309a.js
similarity index 83%
rename from assets/js/136e1c50.b7b64c50.js
rename to assets/js/136e1c50.466d309a.js
index 7e143b558..b91f66651 100644
--- a/assets/js/136e1c50.b7b64c50.js
+++ b/assets/js/136e1c50.466d309a.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1957547a.cfc0dca6.js b/assets/js/1957547a.0f8ec7b9.js
similarity index 74%
rename from assets/js/1957547a.cfc0dca6.js
rename to assets/js/1957547a.0f8ec7b9.js
index 90d2bb0ed..aa2f594bf 100644
--- a/assets/js/1957547a.cfc0dca6.js
+++ b/assets/js/1957547a.0f8ec7b9.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.e9b8327c.js b/assets/js/1db64337.9a503283.js
similarity index 50%
rename from assets/js/1db64337.e9b8327c.js
rename to assets/js/1db64337.9a503283.js
index 0af99fbf3..510bc1044 100644
--- a/assets/js/1db64337.e9b8327c.js
+++ b/assets/js/1db64337.9a503283.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/22d8fa67.0ac591ee.js b/assets/js/22d8fa67.6e4b0319.js
similarity index 85%
rename from assets/js/22d8fa67.0ac591ee.js
rename to assets/js/22d8fa67.6e4b0319.js
index da8430fd5..fa6abbc2b 100644
--- a/assets/js/22d8fa67.0ac591ee.js
+++ b/assets/js/22d8fa67.6e4b0319.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2cbf1097.a92bb3eb.js b/assets/js/2cbf1097.4eaedc2c.js
similarity index 91%
rename from assets/js/2cbf1097.a92bb3eb.js
rename to assets/js/2cbf1097.4eaedc2c.js
index 548bf2d55..4787077d4 100644
--- a/assets/js/2cbf1097.a92bb3eb.js
+++ b/assets/js/2cbf1097.4eaedc2c.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/434bbc94.b7c87a47.js b/assets/js/434bbc94.f788fb5c.js
similarity index 86%
rename from assets/js/434bbc94.b7c87a47.js
rename to assets/js/434bbc94.f788fb5c.js
index 5ed0c3449..94dccc1b2 100644
--- a/assets/js/434bbc94.b7c87a47.js
+++ b/assets/js/434bbc94.f788fb5c.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/57a16c1d.a75e23fe.js b/assets/js/57a16c1d.38948957.js
similarity index 83%
rename from assets/js/57a16c1d.a75e23fe.js
rename to assets/js/57a16c1d.38948957.js
index 787d57115..58fec1209 100644
--- a/assets/js/57a16c1d.a75e23fe.js
+++ b/assets/js/57a16c1d.38948957.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5a65e608.2e2eb711.js b/assets/js/5a65e608.2e2eb711.js
new file mode 100644
index 000000000..be5fd1918
--- /dev/null
+++ b/assets/js/5a65e608.2e2eb711.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6427],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5a65e608.60347efa.js b/assets/js/5a65e608.60347efa.js
deleted file mode 100644
index 6ad6c4be2..000000000
--- a/assets/js/5a65e608.60347efa.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6427],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/62a401e9.6baec00f.js b/assets/js/62a401e9.57604eb4.js
similarity index 84%
rename from assets/js/62a401e9.6baec00f.js
rename to assets/js/62a401e9.57604eb4.js
index f8d9c86bd..0692ffa7a 100644
--- a/assets/js/62a401e9.6baec00f.js
+++ b/assets/js/62a401e9.57604eb4.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6089],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6089],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6eb7fe18.76da508d.js b/assets/js/6eb7fe18.76da508d.js
deleted file mode 100644
index 7b4029b9a..000000000
--- a/assets/js/6eb7fe18.76da508d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3922],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6eb7fe18.e0c612bd.js b/assets/js/6eb7fe18.e0c612bd.js
new file mode 100644
index 000000000..374accafb
--- /dev/null
+++ b/assets/js/6eb7fe18.e0c612bd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3922],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8cc9519e.9f455f82.js b/assets/js/8cc9519e.3365f55b.js
similarity index 89%
rename from assets/js/8cc9519e.9f455f82.js
rename to assets/js/8cc9519e.3365f55b.js
index d5966c355..fae39c9f7 100644
--- a/assets/js/8cc9519e.9f455f82.js
+++ b/assets/js/8cc9519e.3365f55b.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8f4159f2.d0fd5e4b.js b/assets/js/8f4159f2.310ff89e.js
similarity index 89%
rename from assets/js/8f4159f2.d0fd5e4b.js
rename to assets/js/8f4159f2.310ff89e.js
index 02c267393..8be7e5269 100644
--- a/assets/js/8f4159f2.d0fd5e4b.js
+++ b/assets/js/8f4159f2.310ff89e.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/a0405932.7a070b0c.js b/assets/js/a0405932.82b15615.js
similarity index 81%
rename from assets/js/a0405932.7a070b0c.js
rename to assets/js/a0405932.82b15615.js
index 4341d0395..687271826 100644
--- a/assets/js/a0405932.7a070b0c.js
+++ b/assets/js/a0405932.82b15615.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
diff --git a/assets/js/ab10c306.d7b5ed98.js b/assets/js/ab10c306.58a70519.js
similarity index 68%
rename from assets/js/ab10c306.d7b5ed98.js
rename to assets/js/ab10c306.58a70519.js
index 743dcc76d..4de50ebf6 100644
--- a/assets/js/ab10c306.d7b5ed98.js
+++ b/assets/js/ab10c306.58a70519.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[380],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[380],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/ae4554eb.308a1ad3.js b/assets/js/ae4554eb.308a1ad3.js
deleted file mode 100644
index a715d945b..000000000
--- a/assets/js/ae4554eb.308a1ad3.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ae4554eb.90e1053c.js b/assets/js/ae4554eb.90e1053c.js
new file mode 100644
index 000000000..896104d4b
--- /dev/null
+++ b/assets/js/ae4554eb.90e1053c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/b56f9725.5153d64b.js b/assets/js/b56f9725.a9644e25.js
similarity index 84%
rename from assets/js/b56f9725.5153d64b.js
rename to assets/js/b56f9725.a9644e25.js
index b17d7e4b2..ae8a8bb65 100644
--- a/assets/js/b56f9725.5153d64b.js
+++ b/assets/js/b56f9725.a9644e25.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/bb5b2057.1cd50d7f.js b/assets/js/bb5b2057.20c1df4d.js
similarity index 83%
rename from assets/js/bb5b2057.1cd50d7f.js
rename to assets/js/bb5b2057.20c1df4d.js
index c5f86a076..536243252 100644
--- a/assets/js/bb5b2057.1cd50d7f.js
+++ b/assets/js/bb5b2057.20c1df4d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c6ab695b.b838ffc8.js b/assets/js/c6ab695b.9ed8f02a.js
similarity index 72%
rename from assets/js/c6ab695b.b838ffc8.js
rename to assets/js/c6ab695b.9ed8f02a.js
index 27c609552..8fd84313a 100644
--- a/assets/js/c6ab695b.b838ffc8.js
+++ b/assets/js/c6ab695b.9ed8f02a.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/cc62039a.06f90f66.js b/assets/js/cc62039a.36aef882.js
similarity index 89%
rename from assets/js/cc62039a.06f90f66.js
rename to assets/js/cc62039a.36aef882.js
index edeec142e..7d4471cce 100644
--- a/assets/js/cc62039a.06f90f66.js
+++ b/assets/js/cc62039a.36aef882.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d5c31a96.b44a468f.js b/assets/js/d5c31a96.b44a468f.js
deleted file mode 100644
index 4ad5b7bc5..000000000
--- a/assets/js/d5c31a96.b44a468f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2379],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d5c31a96.f720b7bd.js b/assets/js/d5c31a96.f720b7bd.js
new file mode 100644
index 000000000..a464a4769
--- /dev/null
+++ b/assets/js/d5c31a96.f720b7bd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2379],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e892cec6.e5885413.js b/assets/js/e892cec6.0cbc194e.js
similarity index 86%
rename from assets/js/e892cec6.e5885413.js
rename to assets/js/e892cec6.0cbc194e.js
index cf961dd6e..28b1c7483 100644
--- a/assets/js/e892cec6.e5885413.js
+++ b/assets/js/e892cec6.0cbc194e.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f1ca5a39.68cb26d8.js b/assets/js/f1ca5a39.f0dc8708.js
similarity index 87%
rename from assets/js/f1ca5a39.68cb26d8.js
rename to assets/js/f1ca5a39.f0dc8708.js
index 0a48ea8fa..97e384c60 100644
--- a/assets/js/f1ca5a39.68cb26d8.js
+++ b/assets/js/f1ca5a39.f0dc8708.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.5922cea6.js b/assets/js/runtime~main.5922cea6.js
deleted file mode 100644
index 489d97954..000000000
--- a/assets/js/runtime~main.5922cea6.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,a,c,t,r,f={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var c=d[e]={exports:{}};return f[e].call(c.exports,c,c.exports,b),c.exports}b.m=f,e=[],b.O=(a,c,t,r)=>{if(!c){var f=1/0;for(i=0;i<e.length;i++){c=e[i][0],t=e[i][1],r=e[i][2];for(var d=!0,o=0;o<c.length;o++)(!1&r||f>=r)&&Object.keys(b.O).every((e=>b.O[e](c[o])))?c.splice(o--,1):(d=!1,r<f&&(f=r));if(d){e.splice(i--,1);var n=t();void 0!==n&&(a=n)}}return a}r=r||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.8bf6b716.js b/assets/js/runtime~main.8bf6b716.js
new file mode 100644
index 000000000..7ee57518a
--- /dev/null
+++ b/assets/js/runtime~main.8bf6b716.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,c,t,f,r={},b={};function d(e){var a=b[e];if(void 0!==a)return a.exports;var c=b[e]={exports:{}};return r[e].call(c.exports,c,c.exports,d),c.exports}d.m=r,e=[],d.O=(a,c,t,f)=>{if(!c){var r=1/0;for(i=0;i<e.length;i++){c=e[i][0],t=e[i][1],f=e[i][2];for(var b=!0,o=0;o<c.length;o++)(!1&f||r>=f)&&Object.keys(d.O).every((e=>d.O[e](c[o])))?c.splice(o--,1):(b=!1,f<r&&(r=f));if(b){e.splice(i--,1);var n=t();void 0!==n&&(a=n)}}return a}f=f||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 0cd9b3659..852cacf12 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Archive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/archive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/how-opendal-read-data/index.html b/blog/how-opendal-read-data/index.html
index 8e2a5d895..80be53882 100644
--- a/blog/how-opendal-read-data/index.html
+++ b/blog/how-opendal-read-data/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">OpenDAL Internal: Data Reading | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/how-opendal-read-data"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:la [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index 04723d537..6cb02d043 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Blog | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Blog | Apache OpenDAL"><meta data-rh=" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/opendal-access-data-freely/index.html b/blog/opendal-access-data-freely/index.html
index 3c688ad63..4730f1488 100644
--- a/blog/opendal-access-data-freely/index.html
+++ b/blog/opendal-access-data-freely/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Apache OpenDAL(Incubating): Access Data Freely | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-access-data-freely"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="tru [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index e471bb92d..36635ecd7 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Way to Go: OpenDAL successfully entered Apache Incubator | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-entered-apache-incubator"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><m [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index b62410607..5054d4782 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">2 posts tagged with "announcement" | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/announcement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property= [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 99be807fd..3eef9b64a 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Tags | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Tags | Apache OpenDAL"><meta data [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/internal/index.html b/blog/tags/internal/index.html
index 57d135304..a7e9f79c1 100644
--- a/blog/tags/internal/index.html
+++ b/blog/tags/internal/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">One post tagged with "internal" | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/internal"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:tit [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/category/contributing/index.html b/docs/category/contributing/index.html
index 13bddbeed..1c0c21f95 100644
--- a/docs/category/contributing/index.html
+++ b/docs/category/contributing/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Contributing | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/contributing"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cu [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/category/reference/index.html b/docs/category/reference/index.html
index b44c3c853..b4c5f8c76 100644
--- a/docs/category/reference/index.html
+++ b/docs/category/reference/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Reference | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/reference"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/category/services/index.html b/docs/category/services/index.html
index fd8529275..001322e7d 100644
--- a/docs/category/services/index.html
+++ b/docs/category/services/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Services | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/services"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/contributing/reference/generate_release_note/index.html b/docs/contributing/reference/generate_release_note/index.html
index d5226f0f7..c2b883a75 100644
--- a/docs/contributing/reference/generate_release_note/index.html
+++ b/docs/contributing/reference/generate_release_note/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Generate Release Note | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/reference/generate_release_note"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name= [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/contributing/reference/setup_gpg/index.html b/docs/contributing/reference/setup_gpg/index.html
index e15c91f12..7d028d6bd 100644
--- a/docs/contributing/reference/setup_gpg/index.html
+++ b/docs/contributing/reference/setup_gpg/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Setup GPG Key | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/reference/setup_gpg"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/contributing/release/index.html b/docs/contributing/release/index.html
index 8f855566b..79093551b 100644
--- a/docs/contributing/release/index.html
+++ b/docs/contributing/release/index.html
@@ -5,7 +5,7 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Release | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/release"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
@@ -14,8 +14,8 @@
how the release manager releases a new version in accordance with the Apache requirements.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction"></a></h2><p><code>Source Release</code> is the key point which Apache values, also, is necessary for a release. And OpenDAL will only have source release.</p><p>Please remember that publishing software [...]
we will abandon that version and prepare for the next one.
Our release page will only display ASF releases instead of GitHub Releases.</p><blockquote><ul><li><code>opendal_version</code>: the version for opendal, like <code>0.36.0</code>.</li><li><code>release_version</code>: the version for voting, like <code>0.36.0-rc1</code>.</li><li><code>rc_version</code>: the minor version for voting, like <code>rc1</code>.</li></ul></blockquote><h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-an-asf-release">Create an ASF Release<a href="#create- [...]
-please cancel the release for the current <code>release_version</code>, <em>increase th RC counting</em> and reinitiate a release with the new <code>release_version</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting"></a></h2><p>As an incubating project, OpenDAL requires votes from both the OpenDAL Community and Incubator Community.</p><blockquote><ul><li><code>op [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+please cancel the release for the current <code>release_version</code>, <em>increase th RC counting</em> and reinitiate a release with the new <code>release_version</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting"></a></h2><p>As an incubating project, OpenDAL requires votes from both the OpenDAL Community and Incubator Community.</p><blockquote><ul><li><code>op [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/contributing/verify/index.html b/docs/contributing/verify/index.html
index 174550d5c..912bb9155 100644
--- a/docs/contributing/verify/index.html
+++ b/docs/contributing/verify/index.html
@@ -5,15 +5,15 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Verify | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/verify"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
You can download it directly from <a href="https://raw.githubusercontent.com/apache/incubator-opendal/main/scripts/check.sh" target="_blank" rel="noopener noreferrer">here</a>
-or check it out from the repository:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone git@github.com:apache/incuba [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+or check it out from the repository:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone git@github.com:apache/incuba [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/lua/classes/opendal.metadata.html b/docs/lua/classes/opendal.metadata.html
index 6f70b3e41..ecfad59b7 100644
--- a/docs/lua/classes/opendal.metadata.html
+++ b/docs/lua/classes/opendal.metadata.html
@@ -138,7 +138,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-08-21 15:20:24 </i>
+<i style="float:right;">Last updated 2023-08-21 16:27:25 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
diff --git a/docs/lua/classes/opendal.operator.html b/docs/lua/classes/opendal.operator.html
index d13cdddfc..43e26e39e 100644
--- a/docs/lua/classes/opendal.operator.html
+++ b/docs/lua/classes/opendal.operator.html
@@ -321,7 +321,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-08-21 15:20:24 </i>
+<i style="float:right;">Last updated 2023-08-21 16:27:25 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
diff --git a/docs/lua/index.html b/docs/lua/index.html
index 7d14254d8..e79cf7fe2 100644
--- a/docs/lua/index.html
+++ b/docs/lua/index.html
@@ -57,7 +57,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-08-21 15:20:24 </i>
+<i style="float:right;">Last updated 2023-08-21 16:27:25 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index 2f2cc638d..d855dad9e 100644
--- a/docs/nodejs/classes/BlockingLister.html
+++ b/docs/nodejs/classes/BlockingLister.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">BlockingLister</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -51,7 +51,7 @@
<li class="tsd-description">
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L436">index.d.ts:436</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L436">index.d.ts:436</a></li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index ea5d36584..6bf5c3945 100644
--- a/docs/nodejs/classes/Entry.html
+++ b/docs/nodejs/classes/Entry.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">Entry</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -53,7 +53,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L400">index.d.ts:400</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L400">index.d.ts:400</a></li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index 7c8d97be8..b97059fa3 100644
--- a/docs/nodejs/classes/Lister.html
+++ b/docs/nodejs/classes/Lister.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">Lister</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L424">index.d.ts:424</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L424">index.d.ts:424</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -57,7 +57,7 @@ thing internally.</p>
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L433">index.d.ts:433</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L433">index.d.ts:433</a></li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index fb971a658..1d246a22f 100644
--- a/docs/nodejs/classes/Metadata.html
+++ b/docs/nodejs/classes/Metadata.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">Metadata</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L402">index.d.ts:402</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L402">index.d.ts:402</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -63,7 +63,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L408">index.d.ts:408</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L408">index.d.ts:408</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="contentLength" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>content<wbr/>Length</span><a href="#contentLength" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -73,7 +73,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L410">index.d.ts:410</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L410">index.d.ts:410</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="contentMd5" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>content<wbr/>Md5</span><a href="#contentMd5" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -83,7 +83,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L412">index.d.ts:412</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L412">index.d.ts:412</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -93,7 +93,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L414">index.d.ts:414</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L414">index.d.ts:414</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="etag" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>etag</span><a href="#etag" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -103,7 +103,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L416">index.d.ts:416</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L416">index.d.ts:416</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="lastModified" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>last<wbr/>Modified</span><a href="#lastModified" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -114,7 +114,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L422">index.d.ts:422</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L422">index.d.ts:422</a></li></ul></aside></li></ul></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Methods</h2>
<section class="tsd-panel tsd-member"><a id="isDirectory" class="tsd-anchor"></a>
@@ -126,7 +126,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="isFile" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -136,7 +136,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index db166355c..949e15dc2 100644
--- a/docs/nodejs/classes/Operator.html
+++ b/docs/nodejs/classes/Operator.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">Operator</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -79,7 +79,7 @@
<h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Record</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">></span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="Operator.html" class="tsd-signature-type tsd-kind-class">Operator</a></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Methods</h2>
<section class="tsd-panel tsd-member"><a id="append" class="tsd-anchor"></a>
@@ -104,7 +104,7 @@
<h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="check" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>check</span><a href="#check" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -117,7 +117,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="copy" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>copy</span><a href="#copy" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -136,7 +136,7 @@
<h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="copySync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>copy<wbr/>Sync</span><a href="#copySync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -155,7 +155,7 @@
<h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="createDir" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>create<wbr/>Dir</span><a href="#createDir" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -172,7 +172,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="createDirSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>create<wbr/>Dir<wbr/>Sync</span><a href="#createDirSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -189,7 +189,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="delete" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -207,7 +207,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L269">index.d.ts:269</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L269">index.d.ts:269</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="deleteSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>delete<wbr/>Sync</span><a href="#deleteSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -224,7 +224,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L278">index.d.ts:278</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L278">index.d.ts:278</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="isExist" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>is<wbr/>Exist</span><a href="#isExist" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -241,7 +241,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="isExistSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>is<wbr/>Exist<wbr/>Sync</span><a href="#isExistSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -258,7 +258,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="list" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -277,7 +277,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="Lister.html" class="tsd-signature-type tsd-kind-class">Lister</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L325">index.d.ts:325</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L325">index.d.ts:325</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="listSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>list<wbr/>Sync</span><a href="#listSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -296,7 +296,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type tsd-kind-class">BlockingLister</a></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L348">index.d.ts:348</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L348">index.d.ts:348</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="presignRead" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>presign<wbr/>Read</span><a href="#presignRead" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -316,7 +316,7 @@
<h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L364">index.d.ts:364</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L364">index.d.ts:364</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="presignStat" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>presign<wbr/>Stat</span><a href="#presignStat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -336,7 +336,7 @@
<h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="presignWrite" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>presign<wbr/>Write</span><a href="#presignWrite" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -356,7 +356,7 @@
<h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="read" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -373,7 +373,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type ">Buffer</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="readSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>read<wbr/>Sync</span><a href="#readSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -390,7 +390,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Buffer</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="remove" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>remove</span><a href="#remove" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -408,7 +408,7 @@
<h5><span class="tsd-kind-parameter">paths</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L290">index.d.ts:290</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L290">index.d.ts:290</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="removeAll" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>remove<wbr/>All</span><a href="#removeAll" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -426,7 +426,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L302">index.d.ts:302</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L302">index.d.ts:302</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="rename" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>rename</span><a href="#rename" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -446,7 +446,7 @@
<h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="renameSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>rename<wbr/>Sync</span><a href="#renameSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -466,7 +466,7 @@
<h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="scan" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>scan</span><a href="#scan" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -485,7 +485,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="Lister.html" class="tsd-signature-type tsd-kind-class">Lister</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L234">index.d.ts:234</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L234">index.d.ts:234</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="scanSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>scan<wbr/>Sync</span><a href="#scanSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -504,7 +504,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type tsd-kind-class">BlockingLister</a></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L257">index.d.ts:257</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L257">index.d.ts:257</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="stat" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -527,7 +527,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="statSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>stat<wbr/>Sync</span><a href="#statSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -544,7 +544,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="write" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -563,7 +563,7 @@
<h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="writeSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>write<wbr/>Sync</span><a href="#writeSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -582,7 +582,7 @@
<h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index 0aef0e278..bd6d7788f 100644
--- a/docs/nodejs/interfaces/PresignedRequest.html
+++ b/docs/nodejs/interfaces/PresignedRequest.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">PresignedRequest</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -40,21 +40,21 @@
<div class="tsd-comment tsd-typography"><p>HTTP headers of this request.</p>
</div><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
<section class="tsd-panel tsd-member"><a id="method" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>method</span><a href="#method" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">method</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<div class="tsd-comment tsd-typography"><p>HTTP method of this request.</p>
</div><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
<section class="tsd-panel tsd-member"><a id="url" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>url</span><a href="#url" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">url</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<div class="tsd-comment tsd-typography"><p>URL of this request.</p>
</div><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/8649189/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4e1c14c/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/overview/index.html b/docs/overview/index.html
index e9d1d35e1..8be8d52ba 100644
--- a/docs/overview/index.html
+++ b/docs/overview/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Overview | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index 7baa2573b..032aea507 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -156,22 +156,22 @@
<a class="class" href="#Metadata">Metadata</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#Metadata.etag">etag</a>
+ <a class="variable" href="#Metadata.content_length">content_length</a>
</li>
<li>
- <a class="variable" href="#Metadata.content_md5">content_md5</a>
+ <a class="variable" href="#Metadata.etag">etag</a>
</li>
<li>
<a class="variable" href="#Metadata.content_disposition">content_disposition</a>
</li>
<li>
- <a class="variable" href="#Metadata.mode">mode</a>
+ <a class="variable" href="#Metadata.content_md5">content_md5</a>
</li>
<li>
- <a class="variable" href="#Metadata.content_length">content_length</a>
+ <a class="variable" href="#Metadata.content_type">content_type</a>
</li>
<li>
- <a class="variable" href="#Metadata.content_type">content_type</a>
+ <a class="variable" href="#Metadata.mode">mode</a>
</li>
</ul>
@@ -855,28 +855,28 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
- <div id="Metadata.etag" class="classattr">
+ <div id="Metadata.content_length" class="classattr">
<div class="attr variable">
- <span class="name">etag</span><span class="annotation">: Optional[str]</span>
+ <span class="name">content_length</span><span class="annotation">: int</span>
</div>
- <a class="headerlink" href="#Metadata.etag"></a>
+ <a class="headerlink" href="#Metadata.content_length"></a>
- <div class="docstring"><p>ETag of this entry.</p>
+ <div class="docstring"><p>Content length of this entry.</p>
</div>
</div>
- <div id="Metadata.content_md5" class="classattr">
+ <div id="Metadata.etag" class="classattr">
<div class="attr variable">
- <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+ <span class="name">etag</span><span class="annotation">: Optional[str]</span>
</div>
- <a class="headerlink" href="#Metadata.content_md5"></a>
+ <a class="headerlink" href="#Metadata.etag"></a>
- <div class="docstring"><p>Content MD5 of this entry.</p>
+ <div class="docstring"><p>ETag of this entry.</p>
</div>
@@ -892,41 +892,41 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
</div>
- <div id="Metadata.mode" class="classattr">
+ <div id="Metadata.content_md5" class="classattr">
<div class="attr variable">
- <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
+ <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
</div>
- <a class="headerlink" href="#Metadata.mode"></a>
+ <a class="headerlink" href="#Metadata.content_md5"></a>
- <div class="docstring"><p>mode represent this entry's mode.</p>
+ <div class="docstring"><p>Content MD5 of this entry.</p>
</div>
</div>
- <div id="Metadata.content_length" class="classattr">
+ <div id="Metadata.content_type" class="classattr">
<div class="attr variable">
- <span class="name">content_length</span><span class="annotation">: int</span>
+ <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
</div>
- <a class="headerlink" href="#Metadata.content_length"></a>
+ <a class="headerlink" href="#Metadata.content_type"></a>
- <div class="docstring"><p>Content length of this entry.</p>
+ <div class="docstring"><p>Content Type of this entry.</p>
</div>
</div>
- <div id="Metadata.content_type" class="classattr">
+ <div id="Metadata.mode" class="classattr">
<div class="attr variable">
- <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
+ <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
</div>
- <a class="headerlink" href="#Metadata.content_type"></a>
+ <a class="headerlink" href="#Metadata.mode"></a>
- <div class="docstring"><p>Content Type of this entry.</p>
+ <div class="docstring"><p>mode represent this entry's mode.</p>
</div>
diff --git a/docs/python/search.js b/docs/python/search.js
index 17cf5a717..2590f3854 100644
--- a/docs/python/search.js
+++ b/docs/python/search.js
@@ -1,6 +1,6 @@
window.pdocSearch = (function(){
/** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.wa [...]
- /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
+ /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
// mirrored in build-search-index.js (part 1)
// Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/docs/rust/src/opendal/services/gdrive/backend.rs.html b/docs/rust/src/opendal/services/gdrive/backend.rs.html
index 97779f4ff..34e726379 100644
--- a/docs/rust/src/opendal/services/gdrive/backend.rs.html
+++ b/docs/rust/src/opendal/services/gdrive/backend.rs.html
@@ -110,6 +110,143 @@
<a href="#110" id="110">110</a>
<a href="#111" id="111">111</a>
<a href="#112" id="112">112</a>
+<a href="#113" id="113">113</a>
+<a href="#114" id="114">114</a>
+<a href="#115" id="115">115</a>
+<a href="#116" id="116">116</a>
+<a href="#117" id="117">117</a>
+<a href="#118" id="118">118</a>
+<a href="#119" id="119">119</a>
+<a href="#120" id="120">120</a>
+<a href="#121" id="121">121</a>
+<a href="#122" id="122">122</a>
+<a href="#123" id="123">123</a>
+<a href="#124" id="124">124</a>
+<a href="#125" id="125">125</a>
+<a href="#126" id="126">126</a>
+<a href="#127" id="127">127</a>
+<a href="#128" id="128">128</a>
+<a href="#129" id="129">129</a>
+<a href="#130" id="130">130</a>
+<a href="#131" id="131">131</a>
+<a href="#132" id="132">132</a>
+<a href="#133" id="133">133</a>
+<a href="#134" id="134">134</a>
+<a href="#135" id="135">135</a>
+<a href="#136" id="136">136</a>
+<a href="#137" id="137">137</a>
+<a href="#138" id="138">138</a>
+<a href="#139" id="139">139</a>
+<a href="#140" id="140">140</a>
+<a href="#141" id="141">141</a>
+<a href="#142" id="142">142</a>
+<a href="#143" id="143">143</a>
+<a href="#144" id="144">144</a>
+<a href="#145" id="145">145</a>
+<a href="#146" id="146">146</a>
+<a href="#147" id="147">147</a>
+<a href="#148" id="148">148</a>
+<a href="#149" id="149">149</a>
+<a href="#150" id="150">150</a>
+<a href="#151" id="151">151</a>
+<a href="#152" id="152">152</a>
+<a href="#153" id="153">153</a>
+<a href="#154" id="154">154</a>
+<a href="#155" id="155">155</a>
+<a href="#156" id="156">156</a>
+<a href="#157" id="157">157</a>
+<a href="#158" id="158">158</a>
+<a href="#159" id="159">159</a>
+<a href="#160" id="160">160</a>
+<a href="#161" id="161">161</a>
+<a href="#162" id="162">162</a>
+<a href="#163" id="163">163</a>
+<a href="#164" id="164">164</a>
+<a href="#165" id="165">165</a>
+<a href="#166" id="166">166</a>
+<a href="#167" id="167">167</a>
+<a href="#168" id="168">168</a>
+<a href="#169" id="169">169</a>
+<a href="#170" id="170">170</a>
+<a href="#171" id="171">171</a>
+<a href="#172" id="172">172</a>
+<a href="#173" id="173">173</a>
+<a href="#174" id="174">174</a>
+<a href="#175" id="175">175</a>
+<a href="#176" id="176">176</a>
+<a href="#177" id="177">177</a>
+<a href="#178" id="178">178</a>
+<a href="#179" id="179">179</a>
+<a href="#180" id="180">180</a>
+<a href="#181" id="181">181</a>
+<a href="#182" id="182">182</a>
+<a href="#183" id="183">183</a>
+<a href="#184" id="184">184</a>
+<a href="#185" id="185">185</a>
+<a href="#186" id="186">186</a>
+<a href="#187" id="187">187</a>
+<a href="#188" id="188">188</a>
+<a href="#189" id="189">189</a>
+<a href="#190" id="190">190</a>
+<a href="#191" id="191">191</a>
+<a href="#192" id="192">192</a>
+<a href="#193" id="193">193</a>
+<a href="#194" id="194">194</a>
+<a href="#195" id="195">195</a>
+<a href="#196" id="196">196</a>
+<a href="#197" id="197">197</a>
+<a href="#198" id="198">198</a>
+<a href="#199" id="199">199</a>
+<a href="#200" id="200">200</a>
+<a href="#201" id="201">201</a>
+<a href="#202" id="202">202</a>
+<a href="#203" id="203">203</a>
+<a href="#204" id="204">204</a>
+<a href="#205" id="205">205</a>
+<a href="#206" id="206">206</a>
+<a href="#207" id="207">207</a>
+<a href="#208" id="208">208</a>
+<a href="#209" id="209">209</a>
+<a href="#210" id="210">210</a>
+<a href="#211" id="211">211</a>
+<a href="#212" id="212">212</a>
+<a href="#213" id="213">213</a>
+<a href="#214" id="214">214</a>
+<a href="#215" id="215">215</a>
+<a href="#216" id="216">216</a>
+<a href="#217" id="217">217</a>
+<a href="#218" id="218">218</a>
+<a href="#219" id="219">219</a>
+<a href="#220" id="220">220</a>
+<a href="#221" id="221">221</a>
+<a href="#222" id="222">222</a>
+<a href="#223" id="223">223</a>
+<a href="#224" id="224">224</a>
+<a href="#225" id="225">225</a>
+<a href="#226" id="226">226</a>
+<a href="#227" id="227">227</a>
+<a href="#228" id="228">228</a>
+<a href="#229" id="229">229</a>
+<a href="#230" id="230">230</a>
+<a href="#231" id="231">231</a>
+<a href="#232" id="232">232</a>
+<a href="#233" id="233">233</a>
+<a href="#234" id="234">234</a>
+<a href="#235" id="235">235</a>
+<a href="#236" id="236">236</a>
+<a href="#237" id="237">237</a>
+<a href="#238" id="238">238</a>
+<a href="#239" id="239">239</a>
+<a href="#240" id="240">240</a>
+<a href="#241" id="241">241</a>
+<a href="#242" id="242">242</a>
+<a href="#243" id="243">243</a>
+<a href="#244" id="244">244</a>
+<a href="#245" id="245">245</a>
+<a href="#246" id="246">246</a>
+<a href="#247" id="247">247</a>
+<a href="#248" id="248">248</a>
+<a href="#249" id="249">249</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -131,16 +268,17 @@
<span class="kw">use </span>std::sync::Arc;
<span class="kw">use </span>async_trait::async_trait;
+<span class="kw">use </span>chrono::Utc;
<span class="kw">use </span>http::StatusCode;
<span class="kw">use </span><span class="kw">super</span>::core::GdriveCore;
<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
<span class="kw">use </span><span class="kw">super</span>::writer::GdriveWriter;
<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
+<span class="kw">use </span><span class="kw">crate</span>::services::gdrive::core::GdriveFile;
+<span class="kw">use </span><span class="kw">crate</span>::services::gdrive::core::GdriveFileList;
<span class="kw">use </span><span class="kw">crate</span>::types::Result;
-<span class="kw">use </span><span class="kw">crate</span>::Capability;
-<span class="kw">use </span><span class="kw">crate</span>::Error;
-<span class="kw">use </span><span class="kw">crate</span>::ErrorKind;
+<span class="kw">use crate</span>::<span class="kw-2">*</span>;
<span class="attr">#[derive(Clone, Debug)]
</span><span class="kw">pub struct </span>GdriveBackend {
@@ -171,27 +309,96 @@
<span class="kw">fn </span>info(<span class="kw-2">&</span><span class="self">self</span>) -> AccessorInfo {
<span class="kw">let </span><span class="kw-2">mut </span>ma = AccessorInfo::default();
- ma.set_scheme(<span class="kw">crate</span>::Scheme::Gdrive)
+ ma.set_scheme(Scheme::Gdrive)
.set_root(<span class="kw-2">&</span><span class="self">self</span>.core.root)
.set_full_capability(Capability {
+ stat: <span class="bool-val">true</span>,
+
read: <span class="bool-val">true</span>,
+
write: <span class="bool-val">true</span>,
+
+ create_dir: <span class="bool-val">true</span>,
+
delete: <span class="bool-val">true</span>,
+
..Default::default()
});
ma
}
+ <span class="kw">async fn </span>stat(<span class="kw-2">&</span><span class="self">self</span>, path: <span class="kw-2">&</span>str, _args: OpStat) -> <span class="prelude-ty">Result</span><RpStat> {
+ <span class="comment">// Stat root always returns a DIR.
+ </span><span class="kw">if </span>path == <span class="string">"/" </span>{
+ <span class="kw">return </span><span class="prelude-val">Ok</span>(RpStat::new(Metadata::new(EntryMode::DIR)));
+ }
+
+ <span class="kw">let </span>resp = <span class="self">self</span>.core.gdrive_stat(path).<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="kw">let </span>status = resp.status();
+
+ <span class="kw">match </span>status {
+ StatusCode::OK => {
+ <span class="kw">let </span>meta = <span class="self">self</span>.parse_metadata(resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>)<span class="question-mark">?</span>;
+ <span class="prelude-val">Ok</span>(RpStat::new(meta))
+ }
+ <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
+ }
+ }
+
+ <span class="kw">async fn </span>create_dir(<span class="kw-2">&</span><span class="self">self</span>, path: <span class="kw-2">&</span>str, _args: OpCreateDir) -> <span class="prelude-ty">Result</span><RpCreateDir> {
+ <span class="kw">let </span>parent = <span class="self">self</span>.core.ensure_parent_path(path).<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="kw">let </span>path = path.split(<span class="string">'/'</span>).filter(|<span class="kw-2">&</span>x| !x.is_empty()).last().unwrap();
+
+ <span class="comment">// As Google Drive allows files have the same name, we need to check if the folder exists.
+ </span><span class="kw">let </span>resp = <span class="self">self</span>.core.gdrive_search_folder(path, <span class="kw-2">&</span>parent).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>status = resp.status();
+
+ <span class="kw">match </span>status {
+ StatusCode::OK => {
+ <span class="kw">let </span>body = resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>meta = serde_json::from_slice::<GdriveFileList>(<span class="kw-2">&</span>body)
+ .map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+
+ <span class="kw">if </span>!meta.files.is_empty() {
+ <span class="kw">return </span><span class="prelude-val">Ok</span>(RpCreateDir::default());
+ }
+ }
+ <span class="kw">_ </span>=> <span class="kw">return </span><span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
+ }
+
+ <span class="kw">let </span>resp = <span class="self">self</span>.core.gdrive_create_folder(path, <span class="prelude-val">Some</span>(parent)).<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="kw">let </span>status = resp.status();
+
+ <span class="kw">match </span>status {
+ StatusCode::OK => <span class="prelude-val">Ok</span>(RpCreateDir::default()),
+ <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
+ }
+ }
+
<span class="kw">async fn </span>read(<span class="kw-2">&</span><span class="self">self</span>, path: <span class="kw-2">&</span>str, _args: OpRead) -> <span class="prelude-ty">Result</span><(RpRead, <span class="self">Self</span>::Reader)> {
- <span class="kw">let </span>resp = <span class="self">self</span>.core.gdrive_get(path).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="comment">// We need to request for metadata and body separately here.
+ // Request for metadata first to check if the file exists.
+ </span><span class="kw">let </span>resp = <span class="self">self</span>.core.gdrive_stat(path).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="kw">let </span>status = resp.status();
<span class="kw">match </span>status {
StatusCode::OK => {
- <span class="kw">let </span>meta = parse_into_metadata(path, resp.headers())<span class="question-mark">?</span>;
- <span class="prelude-val">Ok</span>((RpRead::with_metadata(meta), resp.into_body()))
+ <span class="kw">let </span>body = resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>meta = <span class="self">self</span>.parse_metadata(body)<span class="question-mark">?</span>;
+
+ <span class="kw">let </span>resp = <span class="self">self</span>.core.gdrive_get(path).<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="kw">let </span>status = resp.status();
+
+ <span class="kw">match </span>status {
+ StatusCode::OK => <span class="prelude-val">Ok</span>((RpRead::with_metadata(meta), resp.into_body())),
+ <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
+ }
}
<span class="kw">_ </span>=> <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
}
@@ -205,21 +412,88 @@
));
}
+ <span class="comment">// As Google Drive allows files have the same name, we need to check if the file exists.
+ // If the file exists, we will keep its ID and update it.
+ </span><span class="kw">let </span><span class="kw-2">mut </span>file_id: <span class="prelude-ty">Option</span><String> = <span class="prelude-val">None</span>;
+
+ <span class="kw">let </span>resp = <span class="self">self</span>.core.gdrive_stat(path).<span class="kw">await</span>;
+ <span class="comment">// We don't care about the error here.
+ // As long as the file doesn't exist, we will create a new one.
+ </span><span class="kw">if let </span><span class="prelude-val">Ok</span>(resp) = resp {
+ <span class="kw">let </span>status = resp.status();
+
+ <span class="kw">if </span>status == StatusCode::OK {
+ <span class="kw">let </span>body = resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>meta = serde_json::from_slice::<GdriveFile>(<span class="kw-2">&</span>body)
+ .map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+
+ file_id = <span class="kw">if </span>meta.id.is_empty() {
+ <span class="prelude-val">None
+ </span>} <span class="kw">else </span>{
+ <span class="prelude-val">Some</span>(meta.id)
+ };
+ }
+ }
+
<span class="prelude-val">Ok</span>((
RpWrite::default(),
- GdriveWriter::new(<span class="self">self</span>.core.clone(), args, String::from(path)),
+ GdriveWriter::new(<span class="self">self</span>.core.clone(), String::from(path), file_id),
))
}
<span class="kw">async fn </span>delete(<span class="kw-2">&</span><span class="self">self</span>, path: <span class="kw-2">&</span>str, <span class="kw">_</span>: OpDelete) -> <span class="prelude-ty">Result</span><RpDelete> {
- <span class="kw">let </span>resp = <span class="self">self</span>.core.gdrive_delete(path).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>resp = <span class="self">self</span>.core.gdrive_delete(path).<span class="kw">await</span>;
+ <span class="kw">if let </span><span class="prelude-val">Ok</span>(resp) = resp {
+ <span class="kw">let </span>status = resp.status();
- <span class="kw">let </span>status = resp.status();
+ <span class="kw">match </span>status {
+ StatusCode::NO_CONTENT => <span class="kw">return </span><span class="prelude-val">Ok</span>(RpDelete::default()),
+ <span class="kw">_ </span>=> <span class="kw">return </span><span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
+ }
+ };
- <span class="kw">match </span>status {
- StatusCode::NO_CONTENT => <span class="prelude-val">Ok</span>(RpDelete::default()),
- <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
+ <span class="kw">let </span>e = resp.err().unwrap();
+ <span class="kw">if </span>e.kind() == ErrorKind::NotFound {
+ <span class="prelude-val">Ok</span>(RpDelete::default())
+ } <span class="kw">else </span>{
+ <span class="prelude-val">Err</span>(e)
}
}
}
+
+<span class="kw">impl </span>GdriveBackend {
+ <span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>parse_metadata(<span class="kw-2">&</span><span class="self">self</span>, body: bytes::Bytes) -> <span class="prelude-ty">Result</span><Metadata> {
+ <span class="kw">let </span>metadata =
+ serde_json::from_slice::<GdriveFile>(<span class="kw-2">&</span>body).map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+
+ <span class="kw">let </span><span class="kw-2">mut </span>meta = Metadata::new(<span class="kw">match </span>metadata.mime_type.as_str() {
+ <span class="string">"application/vnd.google-apps.folder" </span>=> EntryMode::DIR,
+ <span class="kw">_ </span>=> EntryMode::FILE,
+ });
+
+ <span class="kw">let </span>size = <span class="kw">if </span>meta.mode() == EntryMode::DIR {
+ <span class="comment">// Google Drive does not return the size for folders.
+ </span><span class="number">0
+ </span>} <span class="kw">else </span>{
+ metadata
+ .size
+ .expect(<span class="string">"file size must exist"</span>)
+ .parse::<u64>()
+ .map_err(|e| {
+ Error::new(ErrorKind::Unexpected, <span class="string">"parse content length"</span>).set_source(e)
+ })<span class="question-mark">?
+ </span>};
+ meta = meta.with_content_length(size);
+ meta = meta.with_last_modified(
+ metadata
+ .modified_time
+ .expect(<span class="string">"modified time must exist. please check your query param - fields"</span>)
+ .parse::<chrono::DateTime<Utc>>()
+ .map_err(|e| {
+ Error::new(ErrorKind::Unexpected, <span class="string">"parse last modified time"</span>).set_source(e)
+ })<span class="question-mark">?</span>,
+ );
+ <span class="prelude-val">Ok</span>(meta)
+ }
+}
</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/gdrive/core.rs.html b/docs/rust/src/opendal/services/gdrive/core.rs.html
index 414272ccc..42f4ffae7 100644
--- a/docs/rust/src/opendal/services/gdrive/core.rs.html
+++ b/docs/rust/src/opendal/services/gdrive/core.rs.html
@@ -216,6 +216,223 @@
<a href="#216" id="216">216</a>
<a href="#217" id="217">217</a>
<a href="#218" id="218">218</a>
+<a href="#219" id="219">219</a>
+<a href="#220" id="220">220</a>
+<a href="#221" id="221">221</a>
+<a href="#222" id="222">222</a>
+<a href="#223" id="223">223</a>
+<a href="#224" id="224">224</a>
+<a href="#225" id="225">225</a>
+<a href="#226" id="226">226</a>
+<a href="#227" id="227">227</a>
+<a href="#228" id="228">228</a>
+<a href="#229" id="229">229</a>
+<a href="#230" id="230">230</a>
+<a href="#231" id="231">231</a>
+<a href="#232" id="232">232</a>
+<a href="#233" id="233">233</a>
+<a href="#234" id="234">234</a>
+<a href="#235" id="235">235</a>
+<a href="#236" id="236">236</a>
+<a href="#237" id="237">237</a>
+<a href="#238" id="238">238</a>
+<a href="#239" id="239">239</a>
+<a href="#240" id="240">240</a>
+<a href="#241" id="241">241</a>
+<a href="#242" id="242">242</a>
+<a href="#243" id="243">243</a>
+<a href="#244" id="244">244</a>
+<a href="#245" id="245">245</a>
+<a href="#246" id="246">246</a>
+<a href="#247" id="247">247</a>
+<a href="#248" id="248">248</a>
+<a href="#249" id="249">249</a>
+<a href="#250" id="250">250</a>
+<a href="#251" id="251">251</a>
+<a href="#252" id="252">252</a>
+<a href="#253" id="253">253</a>
+<a href="#254" id="254">254</a>
+<a href="#255" id="255">255</a>
+<a href="#256" id="256">256</a>
+<a href="#257" id="257">257</a>
+<a href="#258" id="258">258</a>
+<a href="#259" id="259">259</a>
+<a href="#260" id="260">260</a>
+<a href="#261" id="261">261</a>
+<a href="#262" id="262">262</a>
+<a href="#263" id="263">263</a>
+<a href="#264" id="264">264</a>
+<a href="#265" id="265">265</a>
+<a href="#266" id="266">266</a>
+<a href="#267" id="267">267</a>
+<a href="#268" id="268">268</a>
+<a href="#269" id="269">269</a>
+<a href="#270" id="270">270</a>
+<a href="#271" id="271">271</a>
+<a href="#272" id="272">272</a>
+<a href="#273" id="273">273</a>
+<a href="#274" id="274">274</a>
+<a href="#275" id="275">275</a>
+<a href="#276" id="276">276</a>
+<a href="#277" id="277">277</a>
+<a href="#278" id="278">278</a>
+<a href="#279" id="279">279</a>
+<a href="#280" id="280">280</a>
+<a href="#281" id="281">281</a>
+<a href="#282" id="282">282</a>
+<a href="#283" id="283">283</a>
+<a href="#284" id="284">284</a>
+<a href="#285" id="285">285</a>
+<a href="#286" id="286">286</a>
+<a href="#287" id="287">287</a>
+<a href="#288" id="288">288</a>
+<a href="#289" id="289">289</a>
+<a href="#290" id="290">290</a>
+<a href="#291" id="291">291</a>
+<a href="#292" id="292">292</a>
+<a href="#293" id="293">293</a>
+<a href="#294" id="294">294</a>
+<a href="#295" id="295">295</a>
+<a href="#296" id="296">296</a>
+<a href="#297" id="297">297</a>
+<a href="#298" id="298">298</a>
+<a href="#299" id="299">299</a>
+<a href="#300" id="300">300</a>
+<a href="#301" id="301">301</a>
+<a href="#302" id="302">302</a>
+<a href="#303" id="303">303</a>
+<a href="#304" id="304">304</a>
+<a href="#305" id="305">305</a>
+<a href="#306" id="306">306</a>
+<a href="#307" id="307">307</a>
+<a href="#308" id="308">308</a>
+<a href="#309" id="309">309</a>
+<a href="#310" id="310">310</a>
+<a href="#311" id="311">311</a>
+<a href="#312" id="312">312</a>
+<a href="#313" id="313">313</a>
+<a href="#314" id="314">314</a>
+<a href="#315" id="315">315</a>
+<a href="#316" id="316">316</a>
+<a href="#317" id="317">317</a>
+<a href="#318" id="318">318</a>
+<a href="#319" id="319">319</a>
+<a href="#320" id="320">320</a>
+<a href="#321" id="321">321</a>
+<a href="#322" id="322">322</a>
+<a href="#323" id="323">323</a>
+<a href="#324" id="324">324</a>
+<a href="#325" id="325">325</a>
+<a href="#326" id="326">326</a>
+<a href="#327" id="327">327</a>
+<a href="#328" id="328">328</a>
+<a href="#329" id="329">329</a>
+<a href="#330" id="330">330</a>
+<a href="#331" id="331">331</a>
+<a href="#332" id="332">332</a>
+<a href="#333" id="333">333</a>
+<a href="#334" id="334">334</a>
+<a href="#335" id="335">335</a>
+<a href="#336" id="336">336</a>
+<a href="#337" id="337">337</a>
+<a href="#338" id="338">338</a>
+<a href="#339" id="339">339</a>
+<a href="#340" id="340">340</a>
+<a href="#341" id="341">341</a>
+<a href="#342" id="342">342</a>
+<a href="#343" id="343">343</a>
+<a href="#344" id="344">344</a>
+<a href="#345" id="345">345</a>
+<a href="#346" id="346">346</a>
+<a href="#347" id="347">347</a>
+<a href="#348" id="348">348</a>
+<a href="#349" id="349">349</a>
+<a href="#350" id="350">350</a>
+<a href="#351" id="351">351</a>
+<a href="#352" id="352">352</a>
+<a href="#353" id="353">353</a>
+<a href="#354" id="354">354</a>
+<a href="#355" id="355">355</a>
+<a href="#356" id="356">356</a>
+<a href="#357" id="357">357</a>
+<a href="#358" id="358">358</a>
+<a href="#359" id="359">359</a>
+<a href="#360" id="360">360</a>
+<a href="#361" id="361">361</a>
+<a href="#362" id="362">362</a>
+<a href="#363" id="363">363</a>
+<a href="#364" id="364">364</a>
+<a href="#365" id="365">365</a>
+<a href="#366" id="366">366</a>
+<a href="#367" id="367">367</a>
+<a href="#368" id="368">368</a>
+<a href="#369" id="369">369</a>
+<a href="#370" id="370">370</a>
+<a href="#371" id="371">371</a>
+<a href="#372" id="372">372</a>
+<a href="#373" id="373">373</a>
+<a href="#374" id="374">374</a>
+<a href="#375" id="375">375</a>
+<a href="#376" id="376">376</a>
+<a href="#377" id="377">377</a>
+<a href="#378" id="378">378</a>
+<a href="#379" id="379">379</a>
+<a href="#380" id="380">380</a>
+<a href="#381" id="381">381</a>
+<a href="#382" id="382">382</a>
+<a href="#383" id="383">383</a>
+<a href="#384" id="384">384</a>
+<a href="#385" id="385">385</a>
+<a href="#386" id="386">386</a>
+<a href="#387" id="387">387</a>
+<a href="#388" id="388">388</a>
+<a href="#389" id="389">389</a>
+<a href="#390" id="390">390</a>
+<a href="#391" id="391">391</a>
+<a href="#392" id="392">392</a>
+<a href="#393" id="393">393</a>
+<a href="#394" id="394">394</a>
+<a href="#395" id="395">395</a>
+<a href="#396" id="396">396</a>
+<a href="#397" id="397">397</a>
+<a href="#398" id="398">398</a>
+<a href="#399" id="399">399</a>
+<a href="#400" id="400">400</a>
+<a href="#401" id="401">401</a>
+<a href="#402" id="402">402</a>
+<a href="#403" id="403">403</a>
+<a href="#404" id="404">404</a>
+<a href="#405" id="405">405</a>
+<a href="#406" id="406">406</a>
+<a href="#407" id="407">407</a>
+<a href="#408" id="408">408</a>
+<a href="#409" id="409">409</a>
+<a href="#410" id="410">410</a>
+<a href="#411" id="411">411</a>
+<a href="#412" id="412">412</a>
+<a href="#413" id="413">413</a>
+<a href="#414" id="414">414</a>
+<a href="#415" id="415">415</a>
+<a href="#416" id="416">416</a>
+<a href="#417" id="417">417</a>
+<a href="#418" id="418">418</a>
+<a href="#419" id="419">419</a>
+<a href="#420" id="420">420</a>
+<a href="#421" id="421">421</a>
+<a href="#422" id="422">422</a>
+<a href="#423" id="423">423</a>
+<a href="#424" id="424">424</a>
+<a href="#425" id="425">425</a>
+<a href="#426" id="426">426</a>
+<a href="#427" id="427">427</a>
+<a href="#428" id="428">428</a>
+<a href="#429" id="429">429</a>
+<a href="#430" id="430">430</a>
+<a href="#431" id="431">431</a>
+<a href="#432" id="432">432</a>
+<a href="#433" id="433">433</a>
+<a href="#434" id="434">434</a>
+<a href="#435" id="435">435</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -238,22 +455,17 @@
<span class="kw">use </span>std::fmt::Formatter;
<span class="kw">use </span>std::sync::Arc;
+<span class="kw">use </span>bytes;
<span class="kw">use </span>http::header;
-<span class="kw">use </span>http::request::Builder;
<span class="kw">use </span>http::Request;
<span class="kw">use </span>http::Response;
<span class="kw">use </span>http::StatusCode;
<span class="kw">use </span>serde::Deserialize;
+<span class="kw">use </span>serde_json::json;
<span class="kw">use </span>tokio::sync::Mutex;
<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
-<span class="kw">use </span><span class="kw">crate</span>::raw::build_rooted_abs_path;
-<span class="kw">use </span><span class="kw">crate</span>::raw::new_json_deserialize_error;
-<span class="kw">use </span><span class="kw">crate</span>::raw::new_request_build_error;
-<span class="kw">use </span><span class="kw">crate</span>::raw::percent_encode_path;
-<span class="kw">use </span><span class="kw">crate</span>::raw::AsyncBody;
-<span class="kw">use </span><span class="kw">crate</span>::raw::HttpClient;
-<span class="kw">use </span><span class="kw">crate</span>::raw::IncomingAsyncBody;
+<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
<span class="kw">use </span><span class="kw">crate</span>::types::Result;
<span class="kw">use </span><span class="kw">crate</span>::Error;
<span class="kw">use </span><span class="kw">crate</span>::ErrorKind;
@@ -261,8 +473,14 @@
<span class="kw">pub struct </span>GdriveCore {
<span class="kw">pub </span>root: String,
<span class="kw">pub </span>access_token: String,
+
<span class="kw">pub </span>client: HttpClient,
- <span class="kw">pub </span>path_cache: Arc<Mutex<HashMap<String, String>>>,
+
+ <span class="doccomment">/// Cache the mapping from path to file id
+ ///
+ /// Google Drive uses file id to identify a file.
+ /// As the path is immutable, we can cache the mapping from path to file id.
+ </span><span class="kw">pub </span>path_cache: Arc<Mutex<HashMap<String, String>>>,
}
<span class="kw">impl </span>Debug <span class="kw">for </span>GdriveCore {
@@ -274,103 +492,235 @@
}
<span class="kw">impl </span>GdriveCore {
- <span class="kw">async fn </span>get_abs_root_id(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><String> {
- <span class="kw">let </span>root = <span class="string">"root"</span>;
+ <span class="doccomment">/// Get the file id by path.
+ /// Including file and folder.
+ ///
+ /// The path is rooted at the root of the Google Drive.
+ ///
+ /// # Notes
+ ///
+ /// - A path is a sequence of file names separated by slashes.
+ /// - A file only knows its parent id, but not its name.
+ /// - To find the file id of a file, we need to traverse the path from the root to the file.
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">async fn </span>get_file_id_by_path(<span class="kw-2">&</span><span class="self">self</span>, file_path: <span class="kw-2">&</span>str) -> <span class="prelude-ty">Result</span><String> {
+ <span class="kw">let </span>path = build_rooted_abs_path(<span class="kw-2">&</span><span class="self">self</span>.root, file_path);
- <span class="kw">if let </span><span class="prelude-val">Some</span>(root_id) = <span class="self">self</span>.path_cache.lock().<span class="kw">await</span>.get(root) {
- <span class="kw">return </span><span class="prelude-val">Ok</span>(root_id.to_string());
- }
+ <span class="kw">let </span><span class="kw-2">mut </span>parent_id = <span class="string">"root"</span>.to_owned();
+ <span class="kw">let </span>file_path_items: Vec<<span class="kw-2">&</span>str> = path.split(<span class="string">'/'</span>).filter(|<span class="kw-2">&</span>x| !x.is_empty()).collect();
+
+ <span class="kw">for </span>(i, item) <span class="kw">in </span>file_path_items.iter().enumerate() {
+ <span class="kw">let </span><span class="kw-2">mut </span>query = <span class="macro">format!</span>(
+ <span class="string">"name = \"{}\" and \"{}\" in parents and trashed = false"</span>,
+ item, parent_id
+ );
+ <span class="kw">if </span>i != file_path_items.len() - <span class="number">1 </span>{
+ query += <span class="string">" and mimeType = 'application/vnd.google-apps.folder'"</span>;
+ }
- <span class="kw">let </span>req = <span class="self">self
- </span>.sign(Request::get(
- <span class="string">"https://www.googleapis.com/drive/v3/files/root"</span>,
+ <span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="macro">format!</span>(
+ <span class="string">"https://www.googleapis.com/drive/v3/files?q={}"</span>,
+ percent_encode_path(<span class="kw-2">&</span>query)
))
- .body(AsyncBody::Empty)
+ .body(AsyncBody::default())
.map_err(new_request_build_error)<span class="question-mark">?</span>;
- <span class="kw">let </span>resp = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>status = resp.status();
+ <span class="kw">let _ </span>= <span class="self">self</span>.sign(<span class="kw-2">&mut </span>req);
+
+ <span class="kw">let </span>resp = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>status = resp.status();
- <span class="kw">match </span>status {
- StatusCode::OK => {
- <span class="kw">let </span>resp_body = <span class="kw-2">&</span>resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">match </span>status {
+ StatusCode::OK => {
+ <span class="kw">let </span>resp_body = <span class="kw-2">&</span>resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>gdrive_file: GdriveFile =
- serde_json::from_slice(resp_body).map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+ <span class="kw">let </span>gdrive_file_list: GdriveFileList =
+ serde_json::from_slice(resp_body).map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
- <span class="kw">let </span>root_id = gdrive_file.id;
+ <span class="kw">if </span>gdrive_file_list.files.is_empty() {
+ <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+ ErrorKind::NotFound,
+ <span class="kw-2">&</span><span class="macro">format!</span>(<span class="string">"path not found: {}"</span>, item),
+ ));
+ }
- <span class="kw">let </span><span class="kw-2">mut </span>cache_guard = <span class="self">self</span>.path_cache.lock().<span class="kw">await</span>;
- cache_guard.insert(root.to_owned(), root_id.clone());
+ <span class="kw">if </span>gdrive_file_list.files.len() > <span class="number">1 </span>{
+ <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::Unexpected, <span class="kw-2">&</span><span class="macro">format!</span>(<span class="string">"please ensure that the file corresponding to the path exists and is unique. the response body is {}"</span>, String::from_utf8_lossy(resp_body))));
+ }
- <span class="prelude-val">Ok</span>(root_id)
+ parent_id = gdrive_file_list.files[<span class="number">0</span>].id.clone();
+ }
+ <span class="kw">_ </span>=> {
+ <span class="kw">return </span><span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>);
+ }
}
- <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
}
+
+ <span class="prelude-val">Ok</span>(parent_id)
}
- <span class="kw">async fn </span>get_file_id_by_path(<span class="kw-2">&</span><span class="self">self</span>, file_path: <span class="kw-2">&</span>str) -> <span class="prelude-ty">Result</span><String> {
- <span class="kw">let </span>path = build_rooted_abs_path(<span class="kw-2">&</span><span class="self">self</span>.root, file_path);
+ <span class="doccomment">/// Ensure the parent path exists.
+ /// If the parent path does not exist, create it.
+ ///
+ /// # Notes
+ ///
+ /// - The path is rooted at the root of the Google Drive.
+ /// - Will create the parent path recursively.
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">async fn </span>ensure_parent_path(<span class="kw-2">&</span><span class="self">self</span>, path: <span class="kw-2">&</span>str) -> <span class="prelude-ty">Result</span><String> {
+ <span class="kw">let </span>path = build_rooted_abs_path(<span class="kw-2">&</span><span class="self">self</span>.root, path);
- <span class="kw">if let </span><span class="prelude-val">Some</span>(file_id) = <span class="self">self</span>.path_cache.lock().<span class="kw">await</span>.get(<span class="kw-2">&</span>path) {
- <span class="kw">return </span><span class="prelude-val">Ok</span>(file_id.to_string());
- }
-
- <span class="kw">let </span><span class="kw-2">mut </span>parent_id = <span class="self">self</span>.get_abs_root_id().<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>file_path_items: Vec<<span class="kw-2">&</span>str> = path.split(<span class="string">'/'</span>).filter(|<span class="kw-2">&</span>x| !x.is_empty()).collect();
+ <span class="kw">let </span><span class="kw-2">mut </span>parent: String = <span class="string">"root"</span>.to_owned();
+ <span class="kw">let </span><span class="kw-2">mut </span>file_path_items: Vec<<span class="kw-2">&</span>str> = path.split(<span class="string">'/'</span>).filter(|<span class="kw-2">&</span>x| !x.is_empty()).collect();
+ file_path_items.pop();
<span class="kw">for </span>(i, item) <span class="kw">in </span>file_path_items.iter().enumerate() {
- <span class="kw">let </span><span class="kw-2">mut </span>query = <span class="macro">format!</span>(
- <span class="string">"name = '{}' and parents = '{}' and trashed = false"</span>,
- item, parent_id
+ <span class="kw">let </span>query = <span class="macro">format!</span>(
+ <span class="string">"name = \"{}\" and \"{}\" in parents and trashed = false and mimeType = 'application/vnd.google-apps.folder'"</span>,
+ item, parent
);
- <span class="kw">if </span>i != file_path_items.len() - <span class="number">1 </span>{
- query += <span class="string">"and mimeType = 'application/vnd.google-apps.folder'"</span>;
- }
- <span class="kw">let </span>req = <span class="self">self
- </span>.sign(Request::get(<span class="macro">format!</span>(
- <span class="string">"https://www.googleapis.com/drive/v3/files?q={}"</span>,
- percent_encode_path(<span class="kw-2">&</span>query)
- )))
- .body(AsyncBody::default())
- .map_err(new_request_build_error)<span class="question-mark">?</span>;
+ <span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="macro">format!</span>(
+ <span class="string">"https://www.googleapis.com/drive/v3/files?q={}"</span>,
+ percent_encode_path(<span class="kw-2">&</span>query)
+ ))
+ .body(AsyncBody::Empty)
+ .map_err(new_request_build_error)<span class="question-mark">?</span>;
+ <span class="kw">let _ </span>= <span class="self">self</span>.sign(<span class="kw-2">&mut </span>req);
<span class="kw">let </span>resp = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="kw">let </span>status = resp.status();
- <span class="kw">if </span>status == StatusCode::OK {
- <span class="kw">let </span>resp_body = <span class="kw-2">&</span>resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
-
- <span class="kw">let </span>gdrive_file_list: GdriveFileList =
- serde_json::from_slice(resp_body).map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
-
- <span class="kw">if </span>gdrive_file_list.files.len() != <span class="number">1 </span>{
- <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::Unexpected, <span class="kw-2">&</span><span class="macro">format!</span>(<span class="string">"Please ensure that the file corresponding to the path exists and is unique. The response body is {}"</span>, String::from_utf8_lossy(resp_body))));
+ <span class="kw">match </span>status {
+ StatusCode::OK => {
+ <span class="kw">let </span>resp_body = <span class="kw-2">&</span>resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="kw">let </span>gdrive_file_list: GdriveFileList =
+ serde_json::from_slice(resp_body).map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+
+ <span class="kw">if </span>gdrive_file_list.files.len() != <span class="number">1 </span>{
+ <span class="kw">let </span>parent_name = file_path_items[i];
+ <span class="kw">let </span>resp_body = <span class="self">self
+ </span>.gdrive_create_folder(parent_name, <span class="prelude-val">Some</span>(parent.to_owned()))
+ .<span class="kw">await</span><span class="question-mark">?
+ </span>.into_body()
+ .bytes()
+ .<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>parent_meta: GdriveFile = serde_json::from_slice(<span class="kw-2">&</span>resp_body)
+ .map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+
+ parent = parent_meta.id;
+ } <span class="kw">else </span>{
+ parent = gdrive_file_list.files[<span class="number">0</span>].id.clone();
+ }
+ }
+ StatusCode::NOT_FOUND => {
+ <span class="kw">let </span>parent_name = file_path_items[i];
+ <span class="kw">let </span>res = <span class="self">self
+ </span>.gdrive_create_folder(parent_name, <span class="prelude-val">Some</span>(parent.to_owned()))
+ .<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="kw">let </span>status = res.status();
+
+ <span class="kw">match </span>status {
+ StatusCode::OK => {
+ <span class="kw">let </span>parent_id = res.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+ parent = String::from_utf8_lossy(<span class="kw-2">&</span>parent_id).to_string();
+ }
+ <span class="kw">_ </span>=> {
+ <span class="kw">return </span><span class="prelude-val">Err</span>(parse_error(res).<span class="kw">await</span><span class="question-mark">?</span>);
+ }
+ }
+ }
+ <span class="kw">_ </span>=> {
+ <span class="kw">return </span><span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>);
}
-
- parent_id = gdrive_file_list.files[<span class="number">0</span>].id.clone();
- } <span class="kw">else </span>{
- <span class="kw">return </span><span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>);
}
}
- <span class="kw">let </span><span class="kw-2">mut </span>cache_guard = <span class="self">self</span>.path_cache.lock().<span class="kw">await</span>;
- cache_guard.insert(path, parent_id.clone());
-
- <span class="prelude-val">Ok</span>(parent_id)
+ <span class="prelude-val">Ok</span>(parent.to_owned())
}
+ <span class="kw">pub async fn </span>gdrive_search_folder(
+ <span class="kw-2">&</span><span class="self">self</span>,
+ target: <span class="kw-2">&</span>str,
+ parent: <span class="kw-2">&</span>str,
+ ) -> <span class="prelude-ty">Result</span><Response<IncomingAsyncBody>> {
+ <span class="kw">let </span>query = <span class="macro">format!</span>(
+ <span class="string">"name = '{}' and '{}' in parents and trashed = false and mimeType = 'application/vnd.google-apps.folder'"</span>,
+ target, parent
+ );
+ <span class="kw">let </span>url = <span class="macro">format!</span>(
+ <span class="string">"https://www.googleapis.com/drive/v3/files?q={}"</span>,
+ percent_encode_path(query.as_str())
+ );
+
+ <span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="kw-2">&</span>url)
+ .body(AsyncBody::Empty)
+ .map_err(new_request_build_error)<span class="question-mark">?</span>;
+
+ <span class="self">self</span>.sign(<span class="kw-2">&mut </span>req)<span class="question-mark">?</span>;
+
+ <span class="self">self</span>.client.send(req).<span class="kw">await
+ </span>}
+
+ <span class="doccomment">/// Create a folder.
+ /// Should provide the parent folder id.
+ /// Or will create the folder in the root folder.
+ </span><span class="kw">pub async fn </span>gdrive_create_folder(
+ <span class="kw-2">&</span><span class="self">self</span>,
+ name: <span class="kw-2">&</span>str,
+ parent: <span class="prelude-ty">Option</span><String>,
+ ) -> <span class="prelude-ty">Result</span><Response<IncomingAsyncBody>> {
+ <span class="kw">let </span>url = <span class="string">"https://www.googleapis.com/drive/v3/files"</span>;
+
+ <span class="kw">let </span><span class="kw-2">mut </span>req = Request::post(url)
+ .header(header::CONTENT_TYPE, <span class="string">"application/json"</span>)
+ .body(AsyncBody::Bytes(bytes::Bytes::from(
+ serde_json::to_vec(<span class="kw-2">&</span><span class="macro">json!</span>({
+ <span class="string">"name"</span>: name,
+ <span class="string">"mimeType"</span>: <span class="string">"application/vnd.google-apps.folder"</span>,
+ <span class="comment">// If the parent is not provided, the folder will be created in the root folder.
+ </span><span class="string">"parents"</span>: [parent.unwrap_or(<span class="string">"root"</span>.to_owned())],
+ }))
+ .map_err(|e| {
+ Error::new(
+ ErrorKind::Unexpected,
+ <span class="kw-2">&</span><span class="macro">format!</span>(<span class="string">"failed to serialize json(create folder result): {}"</span>, e),
+ )
+ })<span class="question-mark">?</span>,
+ )))
+ .map_err(new_request_build_error)<span class="question-mark">?</span>;
+
+ <span class="kw">let _ </span>= <span class="self">self</span>.sign(<span class="kw-2">&mut </span>req);
+
+ <span class="self">self</span>.client.send(req).<span class="kw">await
+ </span>}
+
+ <span class="kw">pub async fn </span>gdrive_stat(<span class="kw-2">&</span><span class="self">self</span>, path: <span class="kw-2">&</span>str) -> <span class="prelude-ty">Result</span><Response<IncomingAsyncBody>> {
+ <span class="kw">let </span>path_id = <span class="self">self</span>.get_file_id_by_path(path).<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="comment">// The file metadata in the Google Drive API is very complex.
+ // For now, we only need the file id, name, mime type and modified time.
+ </span><span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="kw-2">&</span><span class="macro">format!</span>(
+ <span class="string">"https://www.googleapis.com/drive/v3/files/{}?fields=id,name,mimeType,size,modifiedTime"</span>,
+ path_id.as_str()
+ ))
+ .body(AsyncBody::Empty)
+ .map_err(new_request_build_error)<span class="question-mark">?</span>;
+ <span class="kw">let _ </span>= <span class="self">self</span>.sign(<span class="kw-2">&mut </span>req);
+
+ <span class="self">self</span>.client.send(req).<span class="kw">await
+ </span>}
+
<span class="kw">pub async fn </span>gdrive_get(<span class="kw-2">&</span><span class="self">self</span>, path: <span class="kw-2">&</span>str) -> <span class="prelude-ty">Result</span><Response<IncomingAsyncBody>> {
<span class="kw">let </span>url: String = <span class="macro">format!</span>(
<span class="string">"https://www.googleapis.com/drive/v3/files/{}?alt=media"</span>,
<span class="self">self</span>.get_file_id_by_path(path).<span class="kw">await</span><span class="question-mark">?
</span>);
- <span class="kw">let </span>req = <span class="self">self
- </span>.sign(Request::get(<span class="kw-2">&</span>url))
+ <span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="kw-2">&</span>url)
.body(AsyncBody::Empty)
.map_err(new_request_build_error)<span class="question-mark">?</span>;
+ <span class="kw">let _ </span>= <span class="self">self</span>.sign(<span class="kw-2">&mut </span>req);
<span class="self">self</span>.client.send(req).<span class="kw">await
</span>}
@@ -383,11 +733,11 @@
body: AsyncBody,
) -> <span class="prelude-ty">Result</span><Response<IncomingAsyncBody>> {
<span class="kw">let </span>url = <span class="macro">format!</span>(
- <span class="string">"https://www.googleapis.com/upload/drive/v3/files/{}"</span>,
+ <span class="string">"https://www.googleapis.com/upload/drive/v3/files/{}?uploadType=media"</span>,
<span class="self">self</span>.get_file_id_by_path(path).<span class="kw">await</span><span class="question-mark">?
</span>);
- <span class="kw">let </span><span class="kw-2">mut </span>req = Request::patch(<span class="kw-2">&</span>url);
+ <span class="kw">let </span><span class="kw-2">mut </span>req = Request::put(<span class="kw-2">&</span>url);
<span class="kw">if let </span><span class="prelude-val">Some</span>(size) = size {
req = req.header(header::CONTENT_LENGTH, size)
@@ -397,7 +747,8 @@
req = req.header(header::CONTENT_TYPE, mime)
}
- <span class="kw">let </span>req = <span class="self">self</span>.sign(req).body(body).map_err(new_request_build_error)<span class="question-mark">?</span>;
+ <span class="kw">let </span><span class="kw-2">mut </span>req = req.body(body).map_err(new_request_build_error)<span class="question-mark">?</span>;
+ <span class="kw">let _ </span>= <span class="self">self</span>.sign(<span class="kw-2">&mut </span>req);
<span class="self">self</span>.client.send(req).<span class="kw">await
</span>}
@@ -408,30 +759,113 @@
<span class="self">self</span>.get_file_id_by_path(path).<span class="kw">await</span><span class="question-mark">?
</span>);
- <span class="kw">let </span>req = <span class="self">self
- </span>.sign(Request::delete(<span class="kw-2">&</span>url))
+ <span class="kw">let </span><span class="kw-2">mut </span>req = Request::delete(<span class="kw-2">&</span>url)
.body(AsyncBody::Empty)
.map_err(new_request_build_error)<span class="question-mark">?</span>;
+ <span class="kw">let _ </span>= <span class="self">self</span>.sign(<span class="kw-2">&mut </span>req);
+
<span class="self">self</span>.client.send(req).<span class="kw">await
</span>}
- <span class="kw">fn </span>sign(<span class="kw-2">&</span><span class="self">self</span>, <span class="kw-2">mut </span>req: Builder) -> Builder {
+ <span class="kw">pub async fn </span>gdrive_upload_simple_request(
+ <span class="kw-2">&</span><span class="self">self</span>,
+ path: <span class="kw-2">&</span>str,
+ size: u64,
+ body: bytes::Bytes,
+ ) -> <span class="prelude-ty">Result</span><Response<IncomingAsyncBody>> {
+ <span class="kw">let </span>parent = <span class="self">self</span>.ensure_parent_path(path).<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="kw">let </span>url = <span class="string">"https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"</span>;
+
+ <span class="kw">let </span>file_name = path.split(<span class="string">'/'</span>).filter(|<span class="kw-2">&</span>x| !x.is_empty()).last().unwrap();
+
+ <span class="kw">let </span>metadata = <span class="kw-2">&</span><span class="macro">json!</span>({
+ <span class="string">"name"</span>: file_name,
+ <span class="string">"parents"</span>: [parent],
+ });
+
+ <span class="kw">let </span>req = Request::post(url).header(<span class="string">"X-Upload-Content-Length"</span>, size);
+
+ <span class="kw">let </span>multipart = Multipart::new()
+ .part(
+ FormDataPart::new(<span class="string">"metadata"</span>)
+ .header(
+ header::CONTENT_TYPE,
+ <span class="string">"application/json; charset=UTF-8"</span>.parse().unwrap(),
+ )
+ .content(metadata.to_string()),
+ )
+ .part(
+ FormDataPart::new(<span class="string">"file"</span>)
+ .header(
+ header::CONTENT_TYPE,
+ <span class="string">"application/octet-stream"</span>.parse().unwrap(),
+ )
+ .content(body),
+ );
+
+ <span class="kw">let </span><span class="kw-2">mut </span>req = multipart.apply(req)<span class="question-mark">?</span>;
+
+ <span class="kw">let _ </span>= <span class="self">self</span>.sign(<span class="kw-2">&mut </span>req);
+
+ <span class="self">self</span>.client.send(req).<span class="kw">await
+ </span>}
+
+ <span class="kw">pub async fn </span>gdrive_upload_overwrite_simple_request(
+ <span class="kw-2">&</span><span class="self">self</span>,
+ file_id: <span class="kw-2">&</span>str,
+ size: u64,
+ body: bytes::Bytes,
+ ) -> <span class="prelude-ty">Result</span><Response<IncomingAsyncBody>> {
+ <span class="kw">let </span>url = <span class="macro">format!</span>(
+ <span class="string">"https://www.googleapis.com/upload/drive/v3/files/{}?uploadType=media"</span>,
+ file_id
+ );
+
+ <span class="kw">let </span><span class="kw-2">mut </span>req = Request::patch(url)
+ .header(header::CONTENT_TYPE, <span class="string">"application/octet-stream"</span>)
+ .header(header::CONTENT_LENGTH, size)
+ .header(<span class="string">"X-Upload-Content-Length"</span>, size)
+ .body(AsyncBody::Bytes(body))
+ .map_err(new_request_build_error)<span class="question-mark">?</span>;
+
+ <span class="kw">let _ </span>= <span class="self">self</span>.sign(<span class="kw-2">&mut </span>req);
+
+ <span class="self">self</span>.client.send(req).<span class="kw">await
+ </span>}
+
+ <span class="kw">fn </span>sign<T>(<span class="kw-2">&</span><span class="self">self</span>, req: <span class="kw-2">&mut </span>Request<T>) -> <span class="prelude-ty">Result</span><()> {
<span class="kw">let </span>auth_header_content = <span class="macro">format!</span>(<span class="string">"Bearer {}"</span>, <span class="self">self</span>.access_token);
- req = req.header(header::AUTHORIZATION, auth_header_content);
- req
+ req.headers_mut()
+ .insert(header::AUTHORIZATION, auth_header_content.parse().unwrap());
+
+ <span class="prelude-val">Ok</span>(())
}
}
-<span class="comment">// refer to https://developers.google.com/drive/api/reference/rest/v3/files#File
-</span><span class="attr">#[derive(Deserialize)]
-</span><span class="kw">struct </span>GdriveFile {
- id: String,
+<span class="comment">// This is the file struct returned by the Google Drive API.
+// This is a complex struct, but we only add the fields we need.
+// refer to https://developers.google.com/drive/api/reference/rest/v3/files#File
+</span><span class="attr">#[derive(Deserialize, Debug)]
+#[serde(rename_all = <span class="string">"camelCase"</span>)]
+</span><span class="kw">pub struct </span>GdriveFile {
+ <span class="kw">pub </span>mime_type: String,
+ <span class="kw">pub </span>id: String,
+ <span class="kw">pub </span>name: String,
+ <span class="kw">pub </span>size: <span class="prelude-ty">Option</span><String>,
+ <span class="comment">// The modified time is not returned unless the `fields`
+ // query parameter contains `modifiedTime`.
+ // As we only need the modified time when we do `stat` operation,
+ // if other operations(such as search) do not specify the `fields` query parameter,
+ // try to access this field, it will be `None`.
+ </span><span class="kw">pub </span>modified_time: <span class="prelude-ty">Option</span><String>,
}
<span class="comment">// refer to https://developers.google.com/drive/api/reference/rest/v3/files/list
</span><span class="attr">#[derive(Deserialize)]
-</span><span class="kw">struct </span>GdriveFileList {
- files: Vec<GdriveFile>,
+#[serde(rename_all = <span class="string">"camelCase"</span>)]
+</span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">struct </span>GdriveFileList {
+ <span class="kw">pub</span>(<span class="kw">crate</span>) files: Vec<GdriveFile>,
}
</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/gdrive/writer.rs.html b/docs/rust/src/opendal/services/gdrive/writer.rs.html
index 8bc344b95..d33983b78 100644
--- a/docs/rust/src/opendal/services/gdrive/writer.rs.html
+++ b/docs/rust/src/opendal/services/gdrive/writer.rs.html
@@ -77,6 +77,44 @@
<a href="#77" id="77">77</a>
<a href="#78" id="78">78</a>
<a href="#79" id="79">79</a>
+<a href="#80" id="80">80</a>
+<a href="#81" id="81">81</a>
+<a href="#82" id="82">82</a>
+<a href="#83" id="83">83</a>
+<a href="#84" id="84">84</a>
+<a href="#85" id="85">85</a>
+<a href="#86" id="86">86</a>
+<a href="#87" id="87">87</a>
+<a href="#88" id="88">88</a>
+<a href="#89" id="89">89</a>
+<a href="#90" id="90">90</a>
+<a href="#91" id="91">91</a>
+<a href="#92" id="92">92</a>
+<a href="#93" id="93">93</a>
+<a href="#94" id="94">94</a>
+<a href="#95" id="95">95</a>
+<a href="#96" id="96">96</a>
+<a href="#97" id="97">97</a>
+<a href="#98" id="98">98</a>
+<a href="#99" id="99">99</a>
+<a href="#100" id="100">100</a>
+<a href="#101" id="101">101</a>
+<a href="#102" id="102">102</a>
+<a href="#103" id="103">103</a>
+<a href="#104" id="104">104</a>
+<a href="#105" id="105">105</a>
+<a href="#106" id="106">106</a>
+<a href="#107" id="107">107</a>
+<a href="#108" id="108">108</a>
+<a href="#109" id="109">109</a>
+<a href="#110" id="110">110</a>
+<a href="#111" id="111">111</a>
+<a href="#112" id="112">112</a>
+<a href="#113" id="113">113</a>
+<a href="#114" id="114">114</a>
+<a href="#115" id="115">115</a>
+<a href="#116" id="116">116</a>
+<a href="#117" id="117">117</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -103,31 +141,61 @@
<span class="kw">use </span><span class="kw">super</span>::core::GdriveCore;
<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
+<span class="kw">use </span><span class="kw">crate</span>::services::gdrive::core::GdriveFile;
<span class="kw">use crate</span>::<span class="kw-2">*</span>;
<span class="kw">pub struct </span>GdriveWriter {
core: Arc<GdriveCore>,
- op: OpWrite,
+
path: String,
+
+ file_id: <span class="prelude-ty">Option</span><String>,
}
<span class="kw">impl </span>GdriveWriter {
- <span class="kw">pub fn </span>new(core: Arc<GdriveCore>, op: OpWrite, path: String) -> <span class="self">Self </span>{
- GdriveWriter { core, op, path }
+ <span class="kw">pub fn </span>new(core: Arc<GdriveCore>, path: String, file_id: <span class="prelude-ty">Option</span><String>) -> <span class="self">Self </span>{
+ GdriveWriter {
+ core,
+ path,
+
+ file_id,
+ }
}
-}
-<span class="attr">#[async_trait]
-</span><span class="kw">impl </span>oio::Write <span class="kw">for </span>GdriveWriter {
- <span class="kw">async fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, bs: Bytes) -> <span class="prelude-ty">Result</span><()> {
+ <span class="doccomment">/// Write a single chunk of data to the object.
+ ///
+ /// This is used for small objects.
+ /// And should overwrite the object if it already exists.
+ </span><span class="kw">pub async fn </span>write_create(<span class="kw-2">&mut </span><span class="self">self</span>, size: u64, body: Bytes) -> <span class="prelude-ty">Result</span><()> {
+ <span class="kw">let </span>resp = <span class="self">self
+ </span>.core
+ .gdrive_upload_simple_request(<span class="kw-2">&</span><span class="self">self</span>.path, size, body)
+ .<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="kw">let </span>status = resp.status();
+
+ <span class="kw">match </span>status {
+ StatusCode::OK | StatusCode::CREATED => {
+ <span class="kw">let </span>bs = resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="kw">let </span>file = serde_json::from_slice::<GdriveFile>(<span class="kw-2">&</span>bs)
+ .map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+
+ <span class="self">self</span>.file_id = <span class="prelude-val">Some</span>(file.id);
+
+ <span class="prelude-val">Ok</span>(())
+ }
+ <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
+ }
+ }
+
+ <span class="kw">pub async fn </span>write_overwrite(<span class="kw-2">&</span><span class="self">self</span>, size: u64, body: Bytes) -> <span class="prelude-ty">Result</span><()> {
+ <span class="kw">let </span>file_id = <span class="self">self</span>.file_id.as_ref().ok_or_else(|| {
+ Error::new(ErrorKind::Unexpected, <span class="string">"file_id is required for overwrite"</span>)
+ })<span class="question-mark">?</span>;
<span class="kw">let </span>resp = <span class="self">self
</span>.core
- .gdrive_update(
- <span class="kw-2">&</span><span class="self">self</span>.path,
- <span class="prelude-val">Some</span>(bs.len()),
- <span class="self">self</span>.op.content_type(),
- AsyncBody::Bytes(bs),
- )
+ .gdrive_upload_overwrite_simple_request(file_id, size, body)
.<span class="kw">await</span><span class="question-mark">?</span>;
<span class="kw">let </span>status = resp.status();
@@ -140,12 +208,20 @@
<span class="kw">_ </span>=> <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
}
}
+}
+
+<span class="attr">#[async_trait]
+</span><span class="kw">impl </span>oio::Write <span class="kw">for </span>GdriveWriter {
+ <span class="kw">async fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, bs: Bytes) -> <span class="prelude-ty">Result</span><()> {
+ <span class="kw">if </span><span class="self">self</span>.file_id.is_none() {
+ <span class="self">self</span>.write_create(bs.len() <span class="kw">as </span>u64, bs).<span class="kw">await
+ </span>} <span class="kw">else </span>{
+ <span class="self">self</span>.write_overwrite(bs.len() <span class="kw">as </span>u64, bs).<span class="kw">await
+ </span>}
+ }
<span class="kw">async fn </span>sink(<span class="kw-2">&mut </span><span class="self">self</span>, _size: u64, _s: oio::Streamer) -> <span class="prelude-ty">Result</span><()> {
- <span class="prelude-val">Err</span>(Error::new(
- ErrorKind::Unsupported,
- <span class="string">"Write::sink is not supported"</span>,
- ))
+ <span class="prelude-val">Err</span>(Error::new(ErrorKind::Unsupported, <span class="string">"sink is not supported"</span>))
}
<span class="kw">async fn </span>abort(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><()> {
diff --git a/docs/services/azblob/index.html b/docs/services/azblob/index.html
index 770b54ffb..e83c3d12f 100644
--- a/docs/services/azblob/index.html
+++ b/docs/services/azblob/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Azblob | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/azblob"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/azdfs/index.html b/docs/services/azdfs/index.html
index ee7d65edd..91c038dc4 100644
--- a/docs/services/azdfs/index.html
+++ b/docs/services/azdfs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Azdfs | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/azdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/cos/index.html b/docs/services/cos/index.html
index c41ba74df..0e30efa44 100644
--- a/docs/services/cos/index.html
+++ b/docs/services/cos/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">COS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/cos"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/dashmap/index.html b/docs/services/dashmap/index.html
index 7586e54d7..5e8afce2b 100644
--- a/docs/services/dashmap/index.html
+++ b/docs/services/dashmap/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">DashMap | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/dashmap"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/fs/index.html b/docs/services/fs/index.html
index bc83cf5c4..7dcf3ecce 100644
--- a/docs/services/fs/index.html
+++ b/docs/services/fs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Fs | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/fs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/ftp/index.html b/docs/services/ftp/index.html
index c38639eb3..779febeb0 100644
--- a/docs/services/ftp/index.html
+++ b/docs/services/ftp/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">FTP | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ftp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/hdfs/index.html b/docs/services/hdfs/index.html
index 4863d0177..95ba9b5f4 100644
--- a/docs/services/hdfs/index.html
+++ b/docs/services/hdfs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">HDFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/hdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/ipfs/index.html b/docs/services/ipfs/index.html
index 44ba1b6eb..96207252e 100644
--- a/docs/services/ipfs/index.html
+++ b/docs/services/ipfs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">IPFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ipfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/ipmfs/index.html b/docs/services/ipmfs/index.html
index 271e1492d..545b4dfe8 100644
--- a/docs/services/ipmfs/index.html
+++ b/docs/services/ipmfs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">IPMFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ipmfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/memory/index.html b/docs/services/memory/index.html
index b5cacb898..cd7f46aa2 100644
--- a/docs/services/memory/index.html
+++ b/docs/services/memory/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Memory | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/memory"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/oss/index.html b/docs/services/oss/index.html
index 0c2844836..8e30fa6ed 100644
--- a/docs/services/oss/index.html
+++ b/docs/services/oss/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">OSS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/oss"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/redis/index.html b/docs/services/redis/index.html
index 1afc51a8a..959c6380f 100644
--- a/docs/services/redis/index.html
+++ b/docs/services/redis/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Redis | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/redis"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/rocksdb/index.html b/docs/services/rocksdb/index.html
index edbf26dd0..6016b334d 100644
--- a/docs/services/rocksdb/index.html
+++ b/docs/services/rocksdb/index.html
@@ -5,7 +5,7 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">RocksDB | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/rocksdb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
@@ -13,8 +13,8 @@
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
issues. It is advisable to follow the steps provided in the <a href="https://github.com/facebook/rocksdb/blob/main/INSTALL.md" target="_blank" rel="noopener noreferrer"><code>INSTALL</code></a>
file to build rocksdb, rather than relying on system libraries that
-may be outdated and incompatible.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration"></a></h2><ul><li><code>root</code>: Set the working directory of <code>OpenDAL</code></li><li><code>datadir</code>: Set the path to the rocksdb data directory</li></ul><p>You can refer to <!-- -->[<code>RocksdbBuilder</code>]<!-- -->'s docs for mor [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+may be outdated and incompatible.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration"></a></h2><ul><li><code>root</code>: Set the working directory of <code>OpenDAL</code></li><li><code>datadir</code>: Set the path to the rocksdb data directory</li></ul><p>You can refer to <!-- -->[<code>RocksdbBuilder</code>]<!-- -->'s docs for mor [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/s3/index.html b/docs/services/s3/index.html
index 3f719eeaa..dd4155e31 100644
--- a/docs/services/s3/index.html
+++ b/docs/services/s3/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">S3 | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/s3"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/sftp/index.html b/docs/services/sftp/index.html
index bdafcf7e5..c86128c11 100644
--- a/docs/services/sftp/index.html
+++ b/docs/services/sftp/index.html
@@ -5,14 +5,14 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">SFTP | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sftp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-lots of files, you should pay attention to close the file after using it.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities"></a></h2><p>This service can be used to:</p><ul class="contains-task-list containsTaskList_mC6p"><li class="task-list-item"><input type="checkbox" checked="" disabled=""> <!-- -->stat</li><li class="task-li [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+lots of files, you should pay attention to close the file after using it.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities"></a></h2><p>This service can be used to:</p><ul class="contains-task-list containsTaskList_mC6p"><li class="task-list-item"><input type="checkbox" checked="" disabled=""> <!-- -->stat</li><li class="task-li [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/sled/index.html b/docs/services/sled/index.html
index 6c8fc434d..c914f3e98 100644
--- a/docs/services/sled/index.html
+++ b/docs/services/sled/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Sled | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sled"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/webhdfs/index.html b/docs/services/webhdfs/index.html
index 0fd22a4cc..55f02e367 100644
--- a/docs/services/webhdfs/index.html
+++ b/docs/services/webhdfs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">WebHDFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/webhdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/vision/index.html b/docs/vision/index.html
index 27c5f7c1c..f41aa5451 100644
--- a/docs/vision/index.html
+++ b/docs/vision/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Vision | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/vision"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh= [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/download/index.html b/download/index.html
index 350b4c8d3..f0c095bfd 100644
--- a/download/index.html
+++ b/download/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Download | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/download"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/index.html b/index.html
index ca5380b8a..a894aa438 100644
--- a/index.html
+++ b/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Apache OpenDAL</title><meta data-rh="true" property="og:title" content="Apache OpenDAL"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docse [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5922cea6.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.8bf6b716.js" as="script">
<link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div id="__docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria [...]
-<script src="/assets/js/runtime~main.5922cea6.js"></script>
+<script src="/assets/js/runtime~main.8bf6b716.js"></script>
<script src="/assets/js/main.d1ac33ca.js"></script>
</body>
</html>
\ No newline at end of file