{"version":3,"sources":["render-methods.ts"],"sourcesContent":["import { UIX } from \"../../uix.ts\";\nimport { logger } from \"../utils/global-values.ts\";\nimport { Entrypoint, html_content, html_content_or_generator, html_generator } from \"../providers/entrypoints.ts\";\nimport { DX_IGNORE, DX_SERIALIZED, DX_SOURCE } from \"datex-core-legacy/runtime/constants.ts\";\nimport { JSTransferableFunction } from \"datex-core-legacy/types/js-function.ts\";\nimport { DOMUtils } from \"../uix-dom/datex-bindings/dom-utils.ts\";\n\n\n/**\n * Default rendering method.\n * Server side prerendering, content hydration over DATEX.\n * \\@frontend properties and functions and :frontend attributes are supported, during initialization only with JSON compatible values.\n * Provides a full DATEX Runtime on the frontend.\n * @param content HTML element or text content\n */\nexport function renderHybrid<T extends html_content_or_generator>(content:T): RenderPreset<RenderMethod.HYBRID, T> {\n\tif (UIX.context == \"frontend\") logger.warn(\"render methods have no effect for components created on the client side (renderHybrid)\")\n\treturn new RenderPreset(RenderMethod.HYBRID, content)\n}\n\n/**\n * Server side prerendering, overriding with content on frontend\n * @param content HTML element or text content\n * @deprecated use renderHybrid and slot default content for backend rendered content that gets overriden by frontend content\n */\nexport function renderPreview<T extends html_content_or_generator>(content:T): RenderPreset<RenderMethod.PREVIEW, T> {\n\tif (UIX.context == \"frontend\") logger.warn(\"render methods have no effect for components created on the client side (renderPreview)\")\n\treturn new RenderPreset(RenderMethod.PREVIEW, content)\n}\n\n\n/**\n * Serve server-side rendererd HTML to the frontend, enable limited JS interactivity\n * Provides no DATEX runtime functionality on the frontend.\n * \\@frontend properties and functions and :frontend attributes are supported, but only with JSON compatible values.\n * Content is not loaded over DATEX\n * @param content HTML element or text content\n */\nexport function renderBackend<T extends html_content_or_generator>(content:T): RenderPreset<RenderMethod.BACKEND, T> {\n\tif (UIX.context == \"frontend\") logger.warn(\"render methods have no effect for components created on the client side (renderBackend)\")\n\treturn new RenderPreset(RenderMethod.BACKEND, content)\n}\n\n/**\n * Just serve static HTML pages to the frontend, no frontend JS at all\n * Dynamic functionality like event listeners, \\@frontend and :frontend is completely ignored\n * @param content HTML element or text content\n */\nexport function renderStatic<T extends html_content_or_generator>(content:T): RenderPreset<RenderMethod.STATIC, T> {\n\tif (UIX.context == \"frontend\") logger.warn(\"render methods have no effect for components created on the client side (renderStatic)\")\n\treturn new RenderPreset(RenderMethod.STATIC, content)\n}\n\n/**\n * No server side prerendering, serve all content over DATEX.\n * Provides a full DATEX runtime on the frontend.\n * \\@frontend properties and functions and :frontend attributes are fully supported\n * @param content HTML element or text content\n */\nexport function renderDynamic<T extends html_content_or_generator>(content:T): RenderPreset<RenderMethod.DYNAMIC, T> {\n\tif (UIX.context == \"frontend\") logger.warn(\"render methods have no effect for components created on the client side (renderDynamic)\")\n\treturn new RenderPreset(RenderMethod.DYNAMIC, content)\n}\n\n\n/**\n * Render on frontend only, no server side prerendering.\n * This function can be used to request frontend rendering from a backend context.\n * @param content_generator \n * @returns \n */\nexport function renderFrontend(content_generator:() => JSX.singleChild|Promise<JSX.singleChild>, placeholder?: html_content): JSX.singleChild {\n\tif (UIX.context == \"frontend\") {\n\t\treturn content_generator()\n\t}\n\telse {\n\t\tconst fn = JSTransferableFunction.functionIsAsync(content_generator) ?\n\t\t\tJSTransferableFunction.createAsync(content_generator).then(fn=>{\n\t\t\t\tfn = $(fn);\n\t\t\t\t(fn as any)[DOMUtils.PLACEHOLDER_CONTENT] = placeholder ?? \"\";\n\t\t\t\treturn fn;\n\t\t\t}) :\n\t\t\t$(JSTransferableFunction.create(content_generator));\n\t\t(fn as any)[DOMUtils.PLACEHOLDER_CONTENT] = placeholder ?? \"\";\n\t\treturn fn\n\t}\n}\n\n\nexport enum RenderMethod {\n\tHYBRID, // Server side prerendering, content hydration over DATEX\n\tBACKEND, // Serve server-side rendererd HTML to the frontend, runtime + reactivity on the backend, frontend context native js functionality\n\tSTATIC, // Just serve static HTML pages to the frontend, no frontend JS at all\n\tDYNAMIC, // No server side prerendering, loading all content over DATEX\n\tRAW_CONTENT, // Serve raw response content\n\tPREVIEW, // // Server side prerendering, override with content on frontend\n\tCACHED_RESPONSE // Serve side cached response, content is token to cached response\n}\n\n\nexport class RenderPreset<R extends RenderMethod = RenderMethod, T extends html_content_or_generator<any,any> = html_content_or_generator> {\n\tconstructor(public readonly __render_method:R, public readonly __content:T, public readonly __status_code?:number) {\n\t\t// don't transmit from backend to frontend via DATEX if static\n\t\tif (this.__render_method == RenderMethod.BACKEND || this.__render_method == RenderMethod.STATIC) {\n\t\t\t// @ts-ignore\n\t\t\tthis[DX_IGNORE] = true;\n\t\t}\n\t}\n} "],"names":["RenderMethod","UIX","logger","DX_IGNORE","JSTransferableFunction","DOMUtils","renderHybrid","content","context","warn","RenderPreset","renderPreview","renderBackend","renderStatic","renderDynamic","renderFrontend","content_generator","placeholder","fn","functionIsAsync","createAsync","then","$","PLACEHOLDER_CONTENT","create","constructor","__render_method","__content","__status_code"],"mappings":"IAyFYA;AAzFZ,SAASC,GAAG,QAAQ,eAAe;AACnC,SAASC,MAAM,QAAQ,4BAA4B;AAEnD,SAASC,SAAS,QAAkC,yCAAyC;AAC7F,SAASC,sBAAsB,QAAQ,yCAAyC;AAChF,SAASC,QAAQ,QAAQ,yCAAyC;AAUlE,OAAO,SAASC,aAAkDC,OAAS;IAE1E,OADmB,cAAfN,IAAIO,OAAO,IAAgBN,OAAOO,IAAI,CAAC,2FACpC,IAAIC,gBAAkCH;AAC9C;AAOA,OAAO,SAASI,cAAmDJ,OAAS;IAE3E,OADmB,cAAfN,IAAIO,OAAO,IAAgBN,OAAOO,IAAI,CAAC,4FACpC,IAAIC,gBAAmCH;AAC/C;AAUA,OAAO,SAASK,cAAmDL,OAAS;IAE3E,OADmB,cAAfN,IAAIO,OAAO,IAAgBN,OAAOO,IAAI,CAAC,4FACpC,IAAIC,gBAAmCH;AAC/C;AAOA,OAAO,SAASM,aAAkDN,OAAS;IAE1E,OADmB,cAAfN,IAAIO,OAAO,IAAgBN,OAAOO,IAAI,CAAC,2FACpC,IAAIC,gBAAkCH;AAC9C;AAQA,OAAO,SAASO,cAAmDP,OAAS;IAE3E,OADmB,cAAfN,IAAIO,OAAO,IAAgBN,OAAOO,IAAI,CAAC,4FACpC,IAAIC,gBAAmCH;AAC/C;AASA,OAAO,SAASQ,eAAeC,iBAAgE,EAAEC,WAA0B;IAC1H,IAAIhB,AAAe,cAAfA,IAAIO,OAAO,EACd,OAAOQ;IAEH;QACJ,IAAME,KAAKd,uBAAuBe,eAAe,CAACH,qBACjDZ,uBAAuBgB,WAAW,CAACJ,mBAAmBK,IAAI,CAACH,CAAAA,MAE1D,AADAA,CAAAA,KAAKI,EAAEJ,GAAE,CACE,CAACb,SAASkB,mBAAmB,CAAC,GAAGN,eAAe,IACpDC,OAERI,EAAElB,uBAAuBoB,MAAM,CAACR;QAEjC,OADA,AAACE,EAAU,CAACb,SAASkB,mBAAmB,CAAC,GAAGN,eAAe,IACpDC;IACR;AACD;;;CAGYlB,eAAAA,kBAAAA;AAWZ,OAAO,MAAMU;;;;IACZe,YAAY,AAAgBC,eAAiB,EAAE,AAAgBC,SAAW,EAAE,AAAgBC,aAAqB,CAAE;aAAvFF,kBAAAA,sBAAmCC,YAAAA,gBAA6BC,gBAAAA,eAEvF,CAAA,KAAA,IAAI,CAACF,eAAe,IAA4B,KAAA,IAAI,CAACA,eAAe,AAAsB,KAE7F,CAAA,IAAI,CAACvB,UAAU,GAAG,CAAA,CAAG;IAEvB;AACD","sourceRoot":"/lib/uix-0.4.39/src/base/","file":"render-methods.ts"}