summaryrefslogtreecommitdiff
path: root/script/uri.lua
blob: 9053447c8edcb6a5a423bcb5191cdaf831530bc0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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,
}