{"version":3,"file":"getStaticMarkup.server.mjs","sources":[""],"sourcesContent":["import type { ReactElement } from \"react\";\r\nimport ReactDom from \"react-dom/server\";\r\nimport type { TAppRenderModes } from \"#package/types\";\r\nimport { RenderContext } from \"../../components/renderContext\";\r\nimport { Localisation } from \"../../plugins/localisation\";\r\nimport { getPrettyHTML } from \"../getPrettyHTML\";\r\n\r\nconst { renderToStaticMarkup, renderToString } = ReactDom;\r\n\r\nconst getDefaultModifier = (str = \"\") => {\r\n  const result = str.replaceAll(/<template data-comment=\"\">([^\"]*)<\\/template>/g, \"\\n$1\");\r\n  return process.env.NODE_ENV === \"production\" ? getPrettyHTML(result) : result;\r\n};\r\n\r\ntype TOptions = Partial<{\r\n  before: string;\r\n  after: string;\r\n  getWithModifier: (str: string) => string;\r\n  mode: Exclude<TAppRenderModes, \"CSR\">;\r\n}>;\r\n\r\n/**\r\n * Получает статичную разметку из React-компонента.\r\n * Используется вне браузерной среды, если вам необходимо использовать JS/TSx только как HTML-шаблонизатор. DOM-дерево может быть недоступно.\r\n * Функция дожидается загрузки плагина `Localisation`.\r\n * @param element{ReactElement} компонент\r\n * @param options{Object=} параметры получения\r\n * @param options.before{String=} строка, добавляемая до компонента\r\n * @param options.after{String=} строка, добавляемая после компонента\r\n * @param options.getWithModifier{Function=} функция, модифицирующая полученный HTML\r\n * @param options.mode{String=} режим получения данных (\"SSG\", \"SSR\")\r\n * @returns {Promise<string>} Возвращает Promise со строкой HTML, сформированной из переданного React-элемента в режиме `SSG` или `SSR`.\r\n * @example\r\n * import { getStaticMarkupForServer } from \"@delement/ui/utils/react\";\r\n *\r\n * const html = await getStaticMarkupForServer(<div>Hello</div>, { mode: \"SSG\" });\r\n */\r\nconst getStaticMarkupForServer = async (element: ReactElement, options?: TOptions): Promise<string> => {\r\n\r\n  if (typeof window !== \"undefined\") {\r\n    throw new Error(`[getStaticMarkupForServer] Function was called on client, use \"getStaticMarkupForClient\" instead`);\r\n  }\r\n\r\n  const {\r\n    before = \"<!DOCTYPE html>\",\r\n    after = \"\",\r\n    getWithModifier = getDefaultModifier,\r\n    mode = \"SSG\",\r\n  } = (options || {});\r\n\r\n  if (!element) {\r\n    return Promise.resolve(\"\");\r\n  }\r\n\r\n  const getLayout = () => {\r\n    let layout;\r\n    const Component = (\r\n      <RenderContext mode={mode} isSSR={true}>\r\n        {element}\r\n      </RenderContext>\r\n    );\r\n    switch (mode) {\r\n      case \"SSG\":\r\n        layout = renderToStaticMarkup(Component);\r\n        break;\r\n      case \"SSR\":\r\n        layout = renderToString(Component);\r\n        break;\r\n      default:\r\n        layout = \"\";\r\n    }\r\n    return getWithModifier(`${before}${layout}${after}`);\r\n  };\r\n\r\n  return new Promise((resolve) => {\r\n    const resolver = () => {\r\n      const layout = getLayout();\r\n      resolve(layout);\r\n    };\r\n    if (Localisation.instance) { // localization are ready\r\n      resolver();\r\n    } else { // wait for localization\r\n      Localisation.create()\r\n        .finally(() => {\r\n          resolver();\r\n        });\r\n    }\r\n  });\r\n};\r\n\r\nexport {\r\n  getStaticMarkupForServer,\r\n};\r\n"],"names":["renderToStaticMarkup","renderToString","ReactDom","getDefaultModifier","str","result","replaceAll","process","env","NODE_ENV","getPrettyHTML","getStaticMarkupForServer","async","element","options","window","Error","before","after","getWithModifier","mode","Promise","resolve","getLayout","layout","Component","_jsx","RenderContext","isSSR","children","resolver","Localisation","instance","create","finally"],"mappings":"6PAOA,MAAMA,qBAAEA,qBAAoBC,eAAEA,gBAAmBC,SAEjD,MAAMC,mBAAqB,CAACC,IAAM,MAChC,MAAMC,OAASD,IAAIE,WAAW,iDAAkD,QAChF,OAAOC,QAAQC,IAAIC,WAAa,aAAeC,cAAcL,QAAUA;;;;;;;;;;;;;;;;GA0BzE,MAAMM,yBAA2BC,MAAOC,QAAuBC,WAE7D,UAAWC,SAAW,YACpB,MAAM,IAAIC,MAAM,oGAGlB,MAAMC,OACJA,OAAS,kBAAiBC,MAC1BA,MAAQ,GAAEC,gBACVA,gBAAkBhB,mBAAkBiB,KACpCA,KAAO,OACJN,SAAW,CAAA,EAEhB,IAAKD,QACH,OAAOQ,QAAQC,QAAQ,IAGzB,MAAMC,UAAY,KAChB,IAAIC,OACJ,MAAMC,UACJC,IAACC,cAAa,CAACP,KAAMA,KAAMQ,MAAO,KAAKC,SACpChB,UAGL,OAAQO,MACN,IAAK,MACHI,OAASxB,qBAAqByB,WAC9B,MACF,IAAK,MACHD,OAASvB,eAAewB,WACxB,MACF,QACED,OAAS,GAEb,OAAOL,gBAAgB,GAAGF,SAASO,SAASN,UAG9C,OAAO,IAAIG,QAASC,UAClB,MAAMQ,SAAW,KACf,MAAMN,OAASD,YACfD,QAAQE,SAEV,GAAIO,aAAaC;;AACfF;;AAEAC,aAAaE,SACVC,QAAQ,KACPJ"}