UNPKG

nuxt

Version:

Nuxt is a free and open-source framework with an intuitive and extendable way to create type-safe, performant and production-grade full-stack web applications and websites with Vue.js.

87 lines (86 loc) 2.76 kB
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; }