e05f99a0d2
Changes: - Added Netlify adapter for server-side rendering - Changed output mode from static to server - Updated KeyStatic storage from local to GitHub - Removed SKIP_KEYSTATIC from Netlify build - KeyStatic Admin UI will be available at /keystatic Features: - Server-side rendering with Netlify Functions - GitHub integration for content management - Production-ready KeyStatic Admin UI Co-Authored-By: Claude <noreply@anthropic.com>
252 lines
7.9 KiB
JavaScript
252 lines
7.9 KiB
JavaScript
import React, { createElement } from 'react';
|
|
import ReactDOM from 'react-dom/server';
|
|
import { g as renderJSX, h as createVNode, A as AstroJSX, i as AstroUserError } from './chunks/astro/server_BfDhyAjM.mjs';
|
|
import 'kleur/colors';
|
|
import 'clsx';
|
|
|
|
const contexts = /* @__PURE__ */ new WeakMap();
|
|
const ID_PREFIX = "r";
|
|
function getContext(rendererContextResult) {
|
|
if (contexts.has(rendererContextResult)) {
|
|
return contexts.get(rendererContextResult);
|
|
}
|
|
const ctx = {
|
|
currentIndex: 0,
|
|
get id() {
|
|
return ID_PREFIX + this.currentIndex.toString();
|
|
}
|
|
};
|
|
contexts.set(rendererContextResult, ctx);
|
|
return ctx;
|
|
}
|
|
function incrementId(rendererContextResult) {
|
|
const ctx = getContext(rendererContextResult);
|
|
const id = ctx.id;
|
|
ctx.currentIndex++;
|
|
return id;
|
|
}
|
|
|
|
const StaticHtml = ({
|
|
value,
|
|
name,
|
|
hydrate = true
|
|
}) => {
|
|
if (!value) return null;
|
|
const tagName = hydrate ? "astro-slot" : "astro-static-slot";
|
|
return createElement(tagName, {
|
|
name,
|
|
suppressHydrationWarning: true,
|
|
dangerouslySetInnerHTML: { __html: value }
|
|
});
|
|
};
|
|
StaticHtml.shouldComponentUpdate = () => false;
|
|
var static_html_default = StaticHtml;
|
|
|
|
const slotName$1 = (str) => str.trim().replace(/[-_]([a-z])/g, (_, w) => w.toUpperCase());
|
|
const reactTypeof = Symbol.for("react.element");
|
|
const reactTransitionalTypeof = Symbol.for("react.transitional.element");
|
|
async function check$1(Component, props, children) {
|
|
if (typeof Component === "object") {
|
|
return Component["$$typeof"].toString().slice("Symbol(".length).startsWith("react");
|
|
}
|
|
if (typeof Component !== "function") return false;
|
|
if (Component.name === "QwikComponent") return false;
|
|
if (typeof Component === "function" && Component["$$typeof"] === Symbol.for("react.forward_ref"))
|
|
return false;
|
|
if (Component.prototype != null && typeof Component.prototype.render === "function") {
|
|
return React.Component.isPrototypeOf(Component) || React.PureComponent.isPrototypeOf(Component);
|
|
}
|
|
let isReactComponent = false;
|
|
function Tester(...args) {
|
|
try {
|
|
const vnode = Component(...args);
|
|
if (vnode && (vnode["$$typeof"] === reactTypeof || vnode["$$typeof"] === reactTransitionalTypeof)) {
|
|
isReactComponent = true;
|
|
}
|
|
} catch {
|
|
}
|
|
return React.createElement("div");
|
|
}
|
|
await renderToStaticMarkup$1.call(this, Tester, props, children);
|
|
return isReactComponent;
|
|
}
|
|
async function getNodeWritable() {
|
|
let nodeStreamBuiltinModuleName = "node:stream";
|
|
let { Writable } = await import(
|
|
/* @vite-ignore */
|
|
nodeStreamBuiltinModuleName
|
|
);
|
|
return Writable;
|
|
}
|
|
function needsHydration(metadata) {
|
|
return metadata?.astroStaticSlot ? !!metadata.hydrate : true;
|
|
}
|
|
async function renderToStaticMarkup$1(Component, props, { default: children, ...slotted }, metadata) {
|
|
let prefix;
|
|
if (this && this.result) {
|
|
prefix = incrementId(this.result);
|
|
}
|
|
const attrs = { prefix };
|
|
delete props["class"];
|
|
const slots = {};
|
|
for (const [key, value] of Object.entries(slotted)) {
|
|
const name = slotName$1(key);
|
|
slots[name] = React.createElement(static_html_default, {
|
|
hydrate: needsHydration(metadata),
|
|
value,
|
|
name
|
|
});
|
|
}
|
|
const newProps = {
|
|
...props,
|
|
...slots
|
|
};
|
|
const newChildren = children ?? props.children;
|
|
if (newChildren != null) {
|
|
newProps.children = React.createElement(static_html_default, {
|
|
hydrate: needsHydration(metadata),
|
|
value: newChildren
|
|
});
|
|
}
|
|
const formState = this ? await getFormState(this) : void 0;
|
|
if (formState) {
|
|
attrs["data-action-result"] = JSON.stringify(formState[0]);
|
|
attrs["data-action-key"] = formState[1];
|
|
attrs["data-action-name"] = formState[2];
|
|
}
|
|
const vnode = React.createElement(Component, newProps);
|
|
const renderOptions = {
|
|
identifierPrefix: prefix,
|
|
formState
|
|
};
|
|
let html;
|
|
if ("renderToReadableStream" in ReactDOM) {
|
|
html = await renderToReadableStreamAsync(vnode, renderOptions);
|
|
} else {
|
|
html = await renderToPipeableStreamAsync(vnode, renderOptions);
|
|
}
|
|
return { html, attrs };
|
|
}
|
|
async function getFormState({
|
|
result
|
|
}) {
|
|
const { request, actionResult } = result;
|
|
if (!actionResult) return void 0;
|
|
if (!isFormRequest(request.headers.get("content-type"))) return void 0;
|
|
const { searchParams } = new URL(request.url);
|
|
const formData = await request.clone().formData();
|
|
const actionKey = formData.get("$ACTION_KEY")?.toString();
|
|
const actionName = searchParams.get("_action");
|
|
if (!actionKey || !actionName) return void 0;
|
|
return [actionResult, actionKey, actionName];
|
|
}
|
|
async function renderToPipeableStreamAsync(vnode, options) {
|
|
const Writable = await getNodeWritable();
|
|
let html = "";
|
|
return new Promise((resolve, reject) => {
|
|
let error = void 0;
|
|
let stream = ReactDOM.renderToPipeableStream(vnode, {
|
|
...options,
|
|
onError(err) {
|
|
error = err;
|
|
reject(error);
|
|
},
|
|
onAllReady() {
|
|
stream.pipe(
|
|
new Writable({
|
|
write(chunk, _encoding, callback) {
|
|
html += chunk.toString("utf-8");
|
|
callback();
|
|
},
|
|
destroy() {
|
|
resolve(html);
|
|
}
|
|
})
|
|
);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
async function readResult(stream) {
|
|
const reader = stream.getReader();
|
|
let result = "";
|
|
const decoder = new TextDecoder("utf-8");
|
|
while (true) {
|
|
const { done, value } = await reader.read();
|
|
if (done) {
|
|
if (value) {
|
|
result += decoder.decode(value);
|
|
} else {
|
|
decoder.decode(new Uint8Array());
|
|
}
|
|
return result;
|
|
}
|
|
result += decoder.decode(value, { stream: true });
|
|
}
|
|
}
|
|
async function renderToReadableStreamAsync(vnode, options) {
|
|
return await readResult(await ReactDOM.renderToReadableStream(vnode, options));
|
|
}
|
|
const formContentTypes = ["application/x-www-form-urlencoded", "multipart/form-data"];
|
|
function isFormRequest(contentType) {
|
|
const type = contentType?.split(";")[0].toLowerCase();
|
|
return formContentTypes.some((t) => type === t);
|
|
}
|
|
const renderer$1 = {
|
|
name: "@astrojs/react",
|
|
check: check$1,
|
|
renderToStaticMarkup: renderToStaticMarkup$1,
|
|
supportsAstroStaticSlot: true
|
|
};
|
|
var server_default$1 = renderer$1;
|
|
|
|
const slotName = (str) => str.trim().replace(/[-_]([a-z])/g, (_, w) => w.toUpperCase());
|
|
async function check(Component, props, { default: children = null, ...slotted } = {}) {
|
|
if (typeof Component !== "function") return false;
|
|
const slots = {};
|
|
for (const [key, value] of Object.entries(slotted)) {
|
|
const name = slotName(key);
|
|
slots[name] = value;
|
|
}
|
|
try {
|
|
const result = await Component({ ...props, ...slots, children });
|
|
return result[AstroJSX];
|
|
} catch (e) {
|
|
throwEnhancedErrorIfMdxComponent(e, Component);
|
|
}
|
|
return false;
|
|
}
|
|
async function renderToStaticMarkup(Component, props = {}, { default: children = null, ...slotted } = {}) {
|
|
const slots = {};
|
|
for (const [key, value] of Object.entries(slotted)) {
|
|
const name = slotName(key);
|
|
slots[name] = value;
|
|
}
|
|
const { result } = this;
|
|
try {
|
|
const html = await renderJSX(result, createVNode(Component, { ...props, ...slots, children }));
|
|
return { html };
|
|
} catch (e) {
|
|
throwEnhancedErrorIfMdxComponent(e, Component);
|
|
throw e;
|
|
}
|
|
}
|
|
function throwEnhancedErrorIfMdxComponent(error, Component) {
|
|
if (Component[Symbol.for("mdx-component")]) {
|
|
if (AstroUserError.is(error)) return;
|
|
error.title = error.name;
|
|
error.hint = `This issue often occurs when your MDX component encounters runtime errors.`;
|
|
throw error;
|
|
}
|
|
}
|
|
const renderer = {
|
|
name: "astro:jsx",
|
|
check,
|
|
renderToStaticMarkup
|
|
};
|
|
var server_default = renderer;
|
|
|
|
const renderers = [Object.assign({"name":"@astrojs/react","clientEntrypoint":"@astrojs/react/client.js","serverEntrypoint":"@astrojs/react/server.js"}, { ssr: server_default$1 }),Object.assign({"name":"astro:jsx","serverEntrypoint":"file:///Users/bugracanata/Developer/%5BTelsiz%5D/ARC-Web-Sitesi/node_modules/@astrojs/mdx/dist/server.js"}, { ssr: server_default }),];
|
|
|
|
export { renderers };
|