nuxt
Version:
87 lines (86 loc) • 2.76 kB
JavaScript
import { setResponseStatus as _setResponseStatus, appendHeader, getRequestHeader, getRequestHeaders } from "h3";
import { getCurrentInstance } from "vue";
import { useServerHead } from "@unhead/vue";
import { useNuxtApp } from "../nuxt.js";
import { toArray } from "../utils.js";
export function useRequestEvent(nuxtApp = useNuxtApp()) {
return nuxtApp.ssrContext?.event;
}
export function useRequestHeaders(include) {
if (import.meta.client) {
return {};
}
const event = useRequestEvent();
const _headers = event ? getRequestHeaders(event) : {};
if (!include || !event) {
return _headers;
}
const headers = /* @__PURE__ */ Object.create(null);
for (const _key of include) {
const key = _key.toLowerCase();
const header = _headers[key];
if (header) {
headers[key] = header;
}
}
return headers;
}
export function useRequestHeader(header) {
if (import.meta.client) {
return void 0;
}
const event = useRequestEvent();
return event ? getRequestHeader(event, header) : void 0;
}
export function useRequestFetch() {
if (import.meta.client) {
return globalThis.$fetch;
}
return useRequestEvent()?.$fetch || globalThis.$fetch;
}
export function setResponseStatus(arg1, arg2, arg3) {
if (import.meta.client) {
return;
}
if (arg1 && typeof arg1 !== "number") {
return _setResponseStatus(arg1, arg2, arg3);
}
const event = useRequestEvent();
if (event) {
return _setResponseStatus(event, arg1, arg2);
}
}
export function prerenderRoutes(path) {
if (!import.meta.server || !import.meta.prerender) {
return;
}
const paths = toArray(path);
appendHeader(useRequestEvent(), "x-nitro-prerender", paths.map((p) => encodeURIComponent(p)).join(", "));
}
const PREHYDRATE_ATTR_KEY = "data-prehydrate-id";
export function onPrehydrate(callback, key) {
if (import.meta.client) {
return;
}
if (typeof callback !== "string") {
throw new TypeError("[nuxt] To transform a callback into a string, `onPrehydrate` must be processed by the Nuxt build pipeline. If it is called in a third-party library, make sure to add the library to `build.transpile`.");
}
const vm = getCurrentInstance();
if (vm && key) {
vm.attrs[PREHYDRATE_ATTR_KEY] ||= "";
key = ":" + key + ":";
if (!vm.attrs[PREHYDRATE_ATTR_KEY].includes(key)) {
vm.attrs[PREHYDRATE_ATTR_KEY] += key;
}
}
const code = vm && key ? `document.querySelectorAll('[${PREHYDRATE_ATTR_KEY}*=${JSON.stringify(key)}]').forEach` + callback : callback + "()";
useServerHead({
script: [{
key: vm && key ? key : code,
tagPosition: "bodyClose",
tagPriority: "critical",
innerHTML: code
}]
});
return vm && key ? vm.attrs[PREHYDRATE_ATTR_KEY] : void 0;
}