This commit implements the core admin dashboard functionality including NextAuth authentication, Cloudflare D1 database integration with complete schema, and Cloudflare R2 file upload system for portfolio images. Features include artist management, appointment scheduling, and data migration capabilities.
205 lines
7.9 KiB
JavaScript
205 lines
7.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
DOMAttributeNames: null,
|
|
default: null,
|
|
isEqualNode: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
DOMAttributeNames: function() {
|
|
return DOMAttributeNames;
|
|
},
|
|
default: function() {
|
|
return initHeadManager;
|
|
},
|
|
isEqualNode: function() {
|
|
return isEqualNode;
|
|
}
|
|
});
|
|
const DOMAttributeNames = {
|
|
acceptCharset: "accept-charset",
|
|
className: "class",
|
|
htmlFor: "for",
|
|
httpEquiv: "http-equiv",
|
|
noModule: "noModule"
|
|
};
|
|
function reactElementToDOM(param) {
|
|
let { type, props } = param;
|
|
const el = document.createElement(type);
|
|
for(const p in props){
|
|
if (!props.hasOwnProperty(p)) continue;
|
|
if (p === "children" || p === "dangerouslySetInnerHTML") continue;
|
|
// we don't render undefined props to the DOM
|
|
if (props[p] === undefined) continue;
|
|
const attr = DOMAttributeNames[p] || p.toLowerCase();
|
|
if (type === "script" && (attr === "async" || attr === "defer" || attr === "noModule")) {
|
|
el[attr] = !!props[p];
|
|
} else {
|
|
el.setAttribute(attr, props[p]);
|
|
}
|
|
}
|
|
const { children, dangerouslySetInnerHTML } = props;
|
|
if (dangerouslySetInnerHTML) {
|
|
el.innerHTML = dangerouslySetInnerHTML.__html || "";
|
|
} else if (children) {
|
|
el.textContent = typeof children === "string" ? children : Array.isArray(children) ? children.join("") : "";
|
|
}
|
|
return el;
|
|
}
|
|
function isEqualNode(oldTag, newTag) {
|
|
if (oldTag instanceof HTMLElement && newTag instanceof HTMLElement) {
|
|
const nonce = newTag.getAttribute("nonce");
|
|
// Only strip the nonce if `oldTag` has had it stripped. An element's nonce attribute will not
|
|
// be stripped if there is no content security policy response header that includes a nonce.
|
|
if (nonce && !oldTag.getAttribute("nonce")) {
|
|
const cloneTag = newTag.cloneNode(true);
|
|
cloneTag.setAttribute("nonce", "");
|
|
cloneTag.nonce = nonce;
|
|
return nonce === oldTag.nonce && oldTag.isEqualNode(cloneTag);
|
|
}
|
|
}
|
|
return oldTag.isEqualNode(newTag);
|
|
}
|
|
let updateElements;
|
|
if (process.env.__NEXT_STRICT_NEXT_HEAD) {
|
|
updateElements = (type, components)=>{
|
|
const headEl = document.querySelector("head");
|
|
if (!headEl) return;
|
|
const headMetaTags = headEl.querySelectorAll('meta[name="next-head"]') || [];
|
|
const oldTags = [];
|
|
if (type === "meta") {
|
|
const metaCharset = headEl.querySelector("meta[charset]");
|
|
if (metaCharset) {
|
|
oldTags.push(metaCharset);
|
|
}
|
|
}
|
|
for(let i = 0; i < headMetaTags.length; i++){
|
|
var _headTag_tagName;
|
|
const metaTag = headMetaTags[i];
|
|
const headTag = metaTag.nextSibling;
|
|
if ((headTag == null ? void 0 : (_headTag_tagName = headTag.tagName) == null ? void 0 : _headTag_tagName.toLowerCase()) === type) {
|
|
oldTags.push(headTag);
|
|
}
|
|
}
|
|
const newTags = components.map(reactElementToDOM).filter((newTag)=>{
|
|
for(let k = 0, len = oldTags.length; k < len; k++){
|
|
const oldTag = oldTags[k];
|
|
if (isEqualNode(oldTag, newTag)) {
|
|
oldTags.splice(k, 1);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
});
|
|
oldTags.forEach((t)=>{
|
|
var _t_parentNode;
|
|
const metaTag = t.previousSibling;
|
|
if (metaTag && metaTag.getAttribute("name") === "next-head") {
|
|
var _t_parentNode1;
|
|
(_t_parentNode1 = t.parentNode) == null ? void 0 : _t_parentNode1.removeChild(metaTag);
|
|
}
|
|
(_t_parentNode = t.parentNode) == null ? void 0 : _t_parentNode.removeChild(t);
|
|
});
|
|
newTags.forEach((t)=>{
|
|
var _t_tagName;
|
|
const meta = document.createElement("meta");
|
|
meta.name = "next-head";
|
|
meta.content = "1";
|
|
// meta[charset] must be first element so special case
|
|
if (!(((_t_tagName = t.tagName) == null ? void 0 : _t_tagName.toLowerCase()) === "meta" && t.getAttribute("charset"))) {
|
|
headEl.appendChild(meta);
|
|
}
|
|
headEl.appendChild(t);
|
|
});
|
|
};
|
|
} else {
|
|
updateElements = (type, components)=>{
|
|
const headEl = document.getElementsByTagName("head")[0];
|
|
const headCountEl = headEl.querySelector("meta[name=next-head-count]");
|
|
if (process.env.NODE_ENV !== "production") {
|
|
if (!headCountEl) {
|
|
console.error("Warning: next-head-count is missing. https://nextjs.org/docs/messages/next-head-count-missing");
|
|
return;
|
|
}
|
|
}
|
|
const headCount = Number(headCountEl.content);
|
|
const oldTags = [];
|
|
for(let i = 0, j = headCountEl.previousElementSibling; i < headCount; i++, j = (j == null ? void 0 : j.previousElementSibling) || null){
|
|
var _j_tagName;
|
|
if ((j == null ? void 0 : (_j_tagName = j.tagName) == null ? void 0 : _j_tagName.toLowerCase()) === type) {
|
|
oldTags.push(j);
|
|
}
|
|
}
|
|
const newTags = components.map(reactElementToDOM).filter((newTag)=>{
|
|
for(let k = 0, len = oldTags.length; k < len; k++){
|
|
const oldTag = oldTags[k];
|
|
if (isEqualNode(oldTag, newTag)) {
|
|
oldTags.splice(k, 1);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
});
|
|
oldTags.forEach((t)=>{
|
|
var _t_parentNode;
|
|
return (_t_parentNode = t.parentNode) == null ? void 0 : _t_parentNode.removeChild(t);
|
|
});
|
|
newTags.forEach((t)=>headEl.insertBefore(t, headCountEl));
|
|
headCountEl.content = (headCount - oldTags.length + newTags.length).toString();
|
|
};
|
|
}
|
|
function initHeadManager() {
|
|
return {
|
|
mountedInstances: new Set(),
|
|
updateHead: (head)=>{
|
|
const tags = {};
|
|
head.forEach((h)=>{
|
|
if (// If the font tag is loaded only on client navigation
|
|
// it won't be inlined. In this case revert to the original behavior
|
|
h.type === "link" && h.props["data-optimized-fonts"]) {
|
|
if (document.querySelector('style[data-href="' + h.props["data-href"] + '"]')) {
|
|
return;
|
|
} else {
|
|
h.props.href = h.props["data-href"];
|
|
h.props["data-href"] = undefined;
|
|
}
|
|
}
|
|
const components = tags[h.type] || [];
|
|
components.push(h);
|
|
tags[h.type] = components;
|
|
});
|
|
const titleComponent = tags.title ? tags.title[0] : null;
|
|
let title = "";
|
|
if (titleComponent) {
|
|
const { children } = titleComponent.props;
|
|
title = typeof children === "string" ? children : Array.isArray(children) ? children.join("") : "";
|
|
}
|
|
if (title !== document.title) document.title = title;
|
|
[
|
|
"meta",
|
|
"base",
|
|
"link",
|
|
"style",
|
|
"script"
|
|
].forEach((type)=>{
|
|
updateElements(type, tags[type] || []);
|
|
});
|
|
}
|
|
};
|
|
}
|
|
|
|
if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
|
|
Object.defineProperty(exports.default, '__esModule', { value: true });
|
|
Object.assign(exports.default, exports);
|
|
module.exports = exports.default;
|
|
}
|
|
|
|
//# sourceMappingURL=head-manager.js.map
|