UNPKG

sveltekit-remote-fn-plugin

Version:
433 lines (430 loc) 12.9 kB
function O(n) { return n && n.__esModule && Object.prototype.hasOwnProperty.call(n, "default") ? n.default : n; } var $ = { exports: {} }, c = $.exports = {}, g, h; function k() { throw new Error("setTimeout has not been defined"); } function F() { throw new Error("clearTimeout has not been defined"); } (function() { try { typeof setTimeout == "function" ? g = setTimeout : g = k; } catch { g = k; } try { typeof clearTimeout == "function" ? h = clearTimeout : h = F; } catch { h = F; } })(); function L(n) { if (g === setTimeout) return setTimeout(n, 0); if ((g === k || !g) && setTimeout) return g = setTimeout, setTimeout(n, 0); try { return g(n, 0); } catch { try { return g.call(null, n, 0); } catch { return g.call(this, n, 0); } } } function U(n) { if (h === clearTimeout) return clearTimeout(n); if ((h === F || !h) && clearTimeout) return h = clearTimeout, clearTimeout(n); try { return h(n); } catch { try { return h.call(null, n); } catch { return h.call(this, n); } } } var y = [], C = !1, b, P = -1; function q() { !C || !b || (C = !1, b.length ? y = b.concat(y) : P = -1, y.length && W()); } function W() { if (!C) { var n = L(q); C = !0; for (var e = y.length; e; ) { for (b = y, y = []; ++P < e; ) b && b[P].run(); P = -1, e = y.length; } b = null, C = !1, U(n); } } c.nextTick = function(n) { var e = new Array(arguments.length - 1); if (arguments.length > 1) for (var r = 1; r < arguments.length; r++) e[r - 1] = arguments[r]; y.push(new x(n, e)), y.length === 1 && !C && L(W); }; function x(n, e) { this.fun = n, this.array = e; } x.prototype.run = function() { this.fun.apply(null, this.array); }; c.title = "browser"; c.browser = !0; c.env = {}; c.argv = []; c.version = ""; c.versions = {}; function w() { } c.on = w; c.addListener = w; c.once = w; c.off = w; c.removeListener = w; c.removeAllListeners = w; c.emit = w; c.prependListener = w; c.prependOnceListener = w; c.listeners = function(n) { return []; }; c.binding = function(n) { throw new Error("process.binding is not supported"); }; c.cwd = function() { return "/"; }; c.chdir = function(n) { throw new Error("process.chdir is not supported"); }; c.umask = function() { return 0; }; var z = $.exports; const H = /* @__PURE__ */ O(z); function d(n) { if (typeof n != "string") throw new TypeError("Path must be a string. Received " + JSON.stringify(n)); } function R(n, e) { for (var r = "", t = 0, i = -1, s = 0, o, a = 0; a <= n.length; ++a) { if (a < n.length) o = n.charCodeAt(a); else { if (o === 47) break; o = 47; } if (o === 47) { if (!(i === a - 1 || s === 1)) if (i !== a - 1 && s === 2) { if (r.length < 2 || t !== 2 || r.charCodeAt(r.length - 1) !== 46 || r.charCodeAt(r.length - 2) !== 46) { if (r.length > 2) { var l = r.lastIndexOf("/"); if (l !== r.length - 1) { l === -1 ? (r = "", t = 0) : (r = r.slice(0, l), t = r.length - 1 - r.lastIndexOf("/")), i = a, s = 0; continue; } } else if (r.length === 2 || r.length === 1) { r = "", t = 0, i = a, s = 0; continue; } } e && (r.length > 0 ? r += "/.." : r = "..", t = 2); } else r.length > 0 ? r += "/" + n.slice(i + 1, a) : r = n.slice(i + 1, a), t = a - i - 1; i = a, s = 0; } else o === 46 && s !== -1 ? ++s : s = -1; } return r; } function B(n, e) { var r = e.dir || e.root, t = e.base || (e.name || "") + (e.ext || ""); return r ? r === e.root ? r + t : r + n + t : t; } var T = { // path.resolve([from ...], to) resolve: function() { for (var e = "", r = !1, t, i = arguments.length - 1; i >= -1 && !r; i--) { var s; i >= 0 ? s = arguments[i] : (t === void 0 && (t = H.cwd()), s = t), d(s), s.length !== 0 && (e = s + "/" + e, r = s.charCodeAt(0) === 47); } return e = R(e, !r), r ? e.length > 0 ? "/" + e : "/" : e.length > 0 ? e : "."; }, normalize: function(e) { if (d(e), e.length === 0) return "."; var r = e.charCodeAt(0) === 47, t = e.charCodeAt(e.length - 1) === 47; return e = R(e, !r), e.length === 0 && !r && (e = "."), e.length > 0 && t && (e += "/"), r ? "/" + e : e; }, isAbsolute: function(e) { return d(e), e.length > 0 && e.charCodeAt(0) === 47; }, join: function() { if (arguments.length === 0) return "."; for (var e, r = 0; r < arguments.length; ++r) { var t = arguments[r]; d(t), t.length > 0 && (e === void 0 ? e = t : e += "/" + t); } return e === void 0 ? "." : T.normalize(e); }, relative: function(e, r) { if (d(e), d(r), e === r || (e = T.resolve(e), r = T.resolve(r), e === r)) return ""; for (var t = 1; t < e.length && e.charCodeAt(t) === 47; ++t) ; for (var i = e.length, s = i - t, o = 1; o < r.length && r.charCodeAt(o) === 47; ++o) ; for (var a = r.length, l = a - o, v = s < l ? s : l, f = -1, u = 0; u <= v; ++u) { if (u === v) { if (l > v) { if (r.charCodeAt(o + u) === 47) return r.slice(o + u + 1); if (u === 0) return r.slice(o + u); } else s > v && (e.charCodeAt(t + u) === 47 ? f = u : u === 0 && (f = 0)); break; } var E = e.charCodeAt(t + u), _ = r.charCodeAt(o + u); if (E !== _) break; E === 47 && (f = u); } var p = ""; for (u = t + f + 1; u <= i; ++u) (u === i || e.charCodeAt(u) === 47) && (p.length === 0 ? p += ".." : p += "/.."); return p.length > 0 ? p + r.slice(o + f) : (o += f, r.charCodeAt(o) === 47 && ++o, r.slice(o)); }, _makeLong: function(e) { return e; }, dirname: function(e) { if (d(e), e.length === 0) return "."; for (var r = e.charCodeAt(0), t = r === 47, i = -1, s = !0, o = e.length - 1; o >= 1; --o) if (r = e.charCodeAt(o), r === 47) { if (!s) { i = o; break; } } else s = !1; return i === -1 ? t ? "/" : "." : t && i === 1 ? "//" : e.slice(0, i); }, basename: function(e, r) { if (r !== void 0 && typeof r != "string") throw new TypeError('"ext" argument must be a string'); d(e); var t = 0, i = -1, s = !0, o; if (r !== void 0 && r.length > 0 && r.length <= e.length) { if (r.length === e.length && r === e) return ""; var a = r.length - 1, l = -1; for (o = e.length - 1; o >= 0; --o) { var v = e.charCodeAt(o); if (v === 47) { if (!s) { t = o + 1; break; } } else l === -1 && (s = !1, l = o + 1), a >= 0 && (v === r.charCodeAt(a) ? --a === -1 && (i = o) : (a = -1, i = l)); } return t === i ? i = l : i === -1 && (i = e.length), e.slice(t, i); } else { for (o = e.length - 1; o >= 0; --o) if (e.charCodeAt(o) === 47) { if (!s) { t = o + 1; break; } } else i === -1 && (s = !1, i = o + 1); return i === -1 ? "" : e.slice(t, i); } }, extname: function(e) { d(e); for (var r = -1, t = 0, i = -1, s = !0, o = 0, a = e.length - 1; a >= 0; --a) { var l = e.charCodeAt(a); if (l === 47) { if (!s) { t = a + 1; break; } continue; } i === -1 && (s = !1, i = a + 1), l === 46 ? r === -1 ? r = a : o !== 1 && (o = 1) : r !== -1 && (o = -1); } return r === -1 || i === -1 || // We saw a non-dot character immediately before the dot o === 0 || // The (right-most) trimmed path component is exactly '..' o === 1 && r === i - 1 && r === t + 1 ? "" : e.slice(r, i); }, format: function(e) { if (e === null || typeof e != "object") throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof e); return B("/", e); }, parse: function(e) { d(e); var r = { root: "", dir: "", base: "", ext: "", name: "" }; if (e.length === 0) return r; var t = e.charCodeAt(0), i = t === 47, s; i ? (r.root = "/", s = 1) : s = 0; for (var o = -1, a = 0, l = -1, v = !0, f = e.length - 1, u = 0; f >= s; --f) { if (t = e.charCodeAt(f), t === 47) { if (!v) { a = f + 1; break; } continue; } l === -1 && (v = !1, l = f + 1), t === 46 ? o === -1 ? o = f : u !== 1 && (u = 1) : o !== -1 && (u = -1); } return o === -1 || l === -1 || // We saw a non-dot character immediately before the dot u === 0 || // The (right-most) trimmed path component is exactly '..' u === 1 && o === l - 1 && o === a + 1 ? l !== -1 && (a === 0 && i ? r.base = r.name = e.slice(1, l) : r.base = r.name = e.slice(a, l)) : (a === 0 && i ? (r.name = e.slice(1, o), r.base = e.slice(1, l)) : (r.name = e.slice(a, o), r.base = e.slice(a, l)), r.ext = e.slice(o, l)), a > 0 ? r.dir = e.slice(0, a - 1) : i && (r.dir = "/"), r; }, sep: "/", delimiter: ":", win32: null, posix: null }; T.posix = T; var m = T, J = null, A = J; const j = m.dirname(new URL(import.meta.url).pathname), D = { serverFunctionsDir: m.join( j, "..", "src", "lib", "server", "functions" ), outputDir: m.join(j, "..", "src", "lib"), apiPrefix: "/api/v1" }; function N(n, e, r) { const t = ` import { post } from '@sveltejs/kit/server'; ${n.map( (i) => ` export async function ${i}(...args: any[]) { try { const response = await post('${r.apiPrefix}/${i}', { args }); if (!response.ok) { throw new Error(\`HTTP error! status: \${response.status}\`); } return await response.json(); } catch (error) { console.error(\`Error calling ${i}:\`, error); throw error; } }` ).join(` `)} `; A.writeFileSync(e, t); } function Q(n, e, r) { n.forEach((t) => { const i = m.join(e, "routes", r.apiPrefix.slice(1), t); A.existsSync(i) || A.mkdirSync(i, { recursive: !0 }); const s = ` import { ${t} } from '$lib/server/functions/${t}.server'; export async function POST({ request }) { const { args } = await request.json(); try { const result = await ${t}(...args); return new Response(JSON.stringify(result), { headers: { 'Content-Type': 'application/json' } }); } catch (error) { console.error(\`Error in ${t}:\`, error); return new Response(JSON.stringify({ error: error.message }), { status: 500, headers: { 'Content-Type': 'application/json' } }); } } `; A.writeFileSync(m.join(i, "+server.ts"), s); }); } function S(n = {}) { const e = { ...D, ...n }, r = A.readdirSync(e.serverFunctionsDir), t = []; r.forEach((s) => { if (s.endsWith(".server.ts")) { const o = m.join(e.serverFunctionsDir, s), l = A.readFileSync(o, "utf-8").match( /export\s+async?\s+function\s+(\w+)/g ); l && l.forEach((v) => { const f = v.split(" ").pop(); f && t.push(f); }); } }); const i = m.join(e.outputDir, "server.ts"); N(t, i, e), Q(t, e.outputDir, e), console.log("Remote functions and routes generated successfully!"); } function M(n = {}) { let e; return { name: "sveltekit-remote-fn", apply(r, { command: t }) { var i; return t === "build" && !((i = r.build) != null && i.ssr); }, configResolved(r) { console.log("BuildStart Config: ", r), e = r; }, buildStart() { console.log("BuildStart Config: ", n), S(n); }, handleHotUpdate({ file: r }) { const t = m.relative(e.root, r); if (console.log("HandleHotUpdate RelativePath: ", t), t.startsWith( n.serverFunctionsDir || D.serverFunctionsDir ) && r.endsWith(".server.ts")) return console.log( "Server function file changed, regenerating remote functions..." ), S(n), []; }, configureServer(r) { const t = r.watcher; t.on("add", (i) => { const s = m.relative(e.root, i); console.log("WatcherOn Add RelativePath: ", s), s.startsWith( n.serverFunctionsDir || D.serverFunctionsDir ) && i.endsWith(".server.ts") && (console.log( "New server function file added, regenerating remote functions..." ), S(n)); }), t.on("unlink", (i) => { const s = m.relative(e.root, i); console.log("WatcherOn Unlink RelativePath: ", s), s.startsWith( n.serverFunctionsDir || D.serverFunctionsDir ) && i.endsWith(".server.ts") && (console.log( "Server function file removed, regenerating remote functions..." ), S(n)); }); } }; } export { M as default };