next-shared-state
Version:
Enhanced state sharing for Next.js with IndexedDB persistence and URL data transfer between pages and components.
48 lines (47 loc) • 1.5 kB
JavaScript
// src/urlTransfer.ts
export class URLTransfer {
static encode(data) {
try {
const compressed = btoa(encodeURIComponent(JSON.stringify(data)));
return compressed;
}
catch (error) {
console.warn("URLTransfer encode failed:", error);
return "";
}
}
static decode(encoded) {
try {
return JSON.parse(decodeURIComponent(atob(encoded)));
}
catch (error) {
console.warn("URLTransfer decode failed:", error);
return null;
}
}
static createTransferURL(path, data) {
const encoded = this.encode(data);
if (!encoded)
return path;
const separator = path.includes("?") ? "&" : "?";
return `${path}${separator}__ndata=${encoded}`;
}
static extractFromURL() {
if (typeof window === "undefined")
return null;
try {
const urlParams = new URLSearchParams(window.location.search);
const encodedData = urlParams.get("__ndata");
if (encodedData) {
// Clean URL after extraction
const newUrl = window.location.pathname + window.location.hash;
window.history.replaceState({}, "", newUrl);
return this.decode(encodedData);
}
}
catch (error) {
console.warn("URLTransfer extraction failed:", error);
}
return null;
}
}