summaryrefslogtreecommitdiff
path: root/script/uri.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script/uri.lua')
-rw-r--r--script/uri.lua29
1 files changed, 29 insertions, 0 deletions
diff --git a/script/uri.lua b/script/uri.lua
new file mode 100644
index 00000000..9053447c
--- /dev/null
+++ b/script/uri.lua
@@ -0,0 +1,29 @@
+local fs = require 'bee.filesystem'
+local platform = require 'bee.platform'
+local sandbox = require 'sandbox'
+local luaUriPath = (ROOT / 'src' / '3rd' / 'lua-uri'):string()
+local URI = sandbox('uri.lua', luaUriPath, io.open)
+local URI_FILE = sandbox('uri/file.lua', luaUriPath, io.open)
+local OS = platform.OS == 'Windows' and 'win32' or 'unix'
+
+local function decode(uri)
+ local obj = URI:new(uri)
+ if not obj.filesystem_path then
+ return nil
+ end
+ local fullPath = obj:filesystem_path(OS)
+ local path = fs.path(fullPath)
+ return path
+end
+
+local function encode(path)
+ local fullPath = fs.absolute(ROOT / path)
+ local obj = URI_FILE.make_file_uri(fullPath:string(), OS)
+ local uri = obj:uri()
+ return uri
+end
+
+return {
+ encode = encode,
+ decode = decode,
+}