UNPKG

next-drupal

Version:
179 lines (171 loc) 5.63 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/navigation.ts var navigation_exports = {}; __export(navigation_exports, { useMenu: () => useMenu }); module.exports = __toCommonJS(navigation_exports); // src/deprecated/use-menu.ts var import_router = require("next/router"); var import_react = require("react"); // src/deprecated/utils.ts var import_jsona = require("jsona"); var import_qs = require("qs"); // src/deprecated/get-cache.ts var import_node_cache = __toESM(require("node-cache"), 1); var cache = new import_node_cache.default(); // src/deprecated/get-access-token.ts var CACHE_KEY = "NEXT_DRUPAL_ACCESS_TOKEN"; async function getAccessToken() { if (!process.env.DRUPAL_CLIENT_ID || !process.env.DRUPAL_CLIENT_SECRET) { return null; } const cached = cache.get(CACHE_KEY); if (cached?.access_token) { return cached; } const basic = Buffer.from( `${process.env.DRUPAL_CLIENT_ID}:${process.env.DRUPAL_CLIENT_SECRET}` ).toString("base64"); const response = await fetch( `${process.env.NEXT_PUBLIC_DRUPAL_BASE_URL}/oauth/token`, { method: "POST", headers: { Authorization: `Basic ${basic}`, "Content-Type": "application/x-www-form-urlencoded" }, body: `grant_type=client_credentials` } ); if (!response.ok) { throw new Error(response.statusText); } const result = await response.json(); cache.set(CACHE_KEY, result, result.expires_in); return result; } // src/deprecated/utils.ts var JSONAPI_PREFIX = process.env.DRUPAL_JSONAPI_PREFIX || "/jsonapi"; var dataFormatter = new import_jsona.Jsona(); function deserialize(body, options) { if (!body) return null; return dataFormatter.deserialize(body, options); } function buildUrl(path, params) { const url = new URL( path.charAt(0) === "/" ? `${process.env.NEXT_PUBLIC_DRUPAL_BASE_URL}${path}` : path ); if (params) { url.search = (0, import_qs.stringify)(params); } return url; } async function buildHeaders({ accessToken, headers = { "Content-Type": "application/json" } } = {}) { if (process.env.UNSTABLE_DRUPAL_ACCESS_TOKEN) { headers["Authorization"] = `Bearer ${process.env.UNSTABLE_DRUPAL_ACCESS_TOKEN}`; return headers; } const token = accessToken || await getAccessToken(); if (token) { headers["Authorization"] = `Bearer ${token.access_token}`; } return headers; } // src/deprecated/get-menu.ts async function getMenu(name, options) { options = { deserialize: true, ...options }; const localePrefix = options?.locale && options.locale !== options.defaultLocale ? `/${options.locale}` : ""; const url = buildUrl(`${localePrefix}/jsonapi/menu_items/${name}`); const response = await fetch(url.toString(), { headers: await buildHeaders(options) }); if (!response.ok) { throw new Error(response.statusText); } const data = await response.json(); const items = options.deserialize ? deserialize(data) : data; const { items: tree } = buildMenuTree(items); return { items, tree }; } function buildMenuTree(links, parent = "") { if (!links?.length) { return { items: [] }; } const children = links.filter((link) => link.parent === parent); return children.length ? { items: children.map((link) => ({ ...link, ...buildMenuTree(links, link.id) })) } : {}; } // src/deprecated/use-menu.ts function useMenu(name) { const router = (0, import_router.useRouter)(); const [data, setData] = (0, import_react.useState)(null); const [error, setError] = (0, import_react.useState)(null); const [isLoading, setIsLoading] = (0, import_react.useState)(false); (0, import_react.useEffect)(() => { const fetchMenuItems = async () => { setIsLoading(true); try { const data2 = await getMenu(name, { locale: router.locale, defaultLocale: router.defaultLocale }); setData(data2); setIsLoading(false); } catch (error2) { setError(error2); setIsLoading(false); } }; fetchMenuItems(); }, [router.locale]); return { ...data, error, isLoading }; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { useMenu }); //# sourceMappingURL=navigation.cjs.map