UNPKG

@buildappolis/env-manager

Version:

Enterprise-grade environment variable management system with encryption, snapshots, and validation

203 lines (197 loc) 6.25 kB
import React, { createElement } from 'react'; import ReactDOM from 'react-dom/server'; 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 = (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(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.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(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(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 = { name: "@astrojs/react", check, renderToStaticMarkup, supportsAstroStaticSlot: true }; var server_default = renderer; const renderers = [Object.assign({"name":"@astrojs/react","clientEntrypoint":"@astrojs/react/client.js","serverEntrypoint":"@astrojs/react/server.js"}, { ssr: server_default }),]; export { renderers };