-
Notifications
You must be signed in to change notification settings - Fork 0
/
node.lua
62 lines (55 loc) · 1.75 KB
/
node.lua
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
local config = require("shiki.config")
local M = {}
---@param ... string
local root = function(...)
return vim.fs.joinpath(vim.fn.stdpath("data") --[[@as string]], "shiki", ...)
end
---@param cfg? shiki.InstallConfig
local install_shiki = function(cfg)
cfg = vim.tbl_deep_extend("force", config.defaults.install or {}, cfg or {})
local shiki = "shiki"
if cfg.version ~= nil then
shiki = "shiki@" .. cfg.version
end
local cmd = vim.iter({ cfg.cmd, cfg.args, shiki }):flatten():totable()
vim.system(cmd, { cwd = root() }, function(result)
if result.code ~= 0 then
error(string.format("shiki.nvim: failed to run '%s':\n%s", table.concat(cmd, " "), result.stderr))
end
vim.schedule(function()
vim.notify(string.format("shiki.nvim: installed %s", shiki), vim.log.levels.INFO)
end)
end)
end
---Initalize a shiki.nvim's node directory
---@param cfg? shiki.InstallConfig
M.init = function(cfg)
if vim.fn.isdirectory(root()) == 1 then
return
end
vim.fn.mkdir(root(), "p")
vim.fn.writefile({ '{"name":"shiki.nvim","private":true}' }, root("package.json"))
install_shiki(cfg)
end
---Delete the shiki.nvim's node directory
M.purge = function()
vim.fn.delete(root(), "rf")
end
---Calls `purge()` followed by `init(config)`
---@param cfg? shiki.InstallConfig
M.rebuild = function(cfg)
M.purge()
M.init(cfg)
end
---Exec an inline script within the shiki.nvim's node directory
---Uses `--input-type=module` to enable module imports.
---@param script string
---@return string # stdout from running the script
M.exec = function(script)
local result = vim.system({ "node", "--input-type", "module", "--eval", script }, { cwd = root() }):wait()
if result.code ~= 0 then
error(result.stderr)
end
return result.stdout
end
return M