UNPKG

@scalar/api-reference

Version:

Generate beautiful API references from OpenAPI documents

65 lines (64 loc) 2.08 kB
import { debounce } from "@scalar/helpers/general/debounce"; import { authStorage, clientStorage } from "../helpers/storage.js"; const persistencePlugin = ({ debounceDelay = 500, maxWait = 1e4, prefix = "", persistAuth = false }) => { const { execute } = debounce({ delay: debounceDelay, maxWait }); const authPersistence = authStorage(); const clientPersistence = clientStorage(); const getPrefix = () => { if (typeof prefix === "string") { return prefix; } return prefix(); }; const getPersistAuth = () => { if (typeof persistAuth === "function") { return persistAuth(); } return persistAuth; }; return { hooks: { /** * Handles all workspace state change events. * Each write is debounced by a key to prevent frequent writes for the same entity. */ onWorkspaceStateChanges(event) { if (event.type === "meta") { const defaultClient = event.value["x-scalar-default-client"]; if (defaultClient !== void 0) { execute("x-scalar-default-client", () => clientPersistence.set(defaultClient)); } return; } if (event.type === "documents") { if (!getPersistAuth()) { return; } const { path, value: document } = event; const { securitySchemes = {} } = document.components ?? {}; if (path[0] === "components" && path[1] === "securitySchemes") { execute("x-scalar-security-schemes", () => authPersistence.setSchemas(getPrefix(), securitySchemes)); } const selectedSecurity = document["x-scalar-selected-security"]; if (path[0] === "x-scalar-selected-security" && selectedSecurity) { execute( "x-scalar-selected-security-schemes", () => authPersistence.setSelectedSchemes(getPrefix(), { "x-scalar-selected-security": selectedSecurity }) ); } } return; } } }; }; export { persistencePlugin };