-- utils.lua local M = {} function M.await(fn, timeout, interval) local done = false local ok, data -- Wrap resolve in vim.schedule so it runs on main loop fn(function(success, result) vim.schedule(function() done = true ok = success data = result end) end) vim.wait(timeout, function() return done end, interval) return { ok = ok or false, data = data } end function M.root_markers_with_field(root_files, new_names, field, fname) local path = vim.fn.fnamemodify(fname, ':h') local found = vim.fs.find(new_names, { path = path, upward = true }) for _, file in ipairs(found or {}) do for line in io.lines(file) do if line:find(field) then root_files[#root_files + 1] = vim.fs.basename(file) break end end end return root_files end function M.insert_package_json(root_files, field, fname) return M.root_markers_with_field(root_files, { 'package.json', 'package.json5' }, field, fname) end return M