@revealui/core 0.0.1-pre.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (728) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE_SUMMARY.md +55 -0
  3. package/README.md +201 -0
  4. package/dist/core/__internal/index.ts +63 -0
  5. package/dist/core/__tests__/assertNoInfiniteHttpRedirect.spec.ts +76 -0
  6. package/dist/core/__tests__/deduceRouteStringFromFilesystemPath.spec.ts +88 -0
  7. package/dist/core/__tests__/freezePartial.spec.ts +40 -0
  8. package/dist/core/__tests__/getValuePrintable.spec.ts +15 -0
  9. package/dist/core/__tests__/injectHtmlTags.spec.ts +101 -0
  10. package/dist/core/__tests__/isHtml.spec.ts +23 -0
  11. package/dist/core/__tests__/isNpmPackage.spec.ts +93 -0
  12. package/dist/core/__tests__/normalizeHeaders.spec.ts +142 -0
  13. package/dist/core/__tests__/parseUrl-extras.spec.ts +60 -0
  14. package/dist/core/__tests__/parseUrl.spec.ts +1339 -0
  15. package/dist/core/__tests__/resolvePrecedence/resolvePrecedence_overall.spec.ts +106 -0
  16. package/dist/core/__tests__/resolvePrecedence/resolvePrecedence_route-strings.spec.ts +99 -0
  17. package/dist/core/__tests__/resolveRedirects.spec.ts +132 -0
  18. package/dist/core/__tests__/resolveRouteString.spec.ts +211 -0
  19. package/dist/core/__tests__/resolveUrlPathname.spec.ts +22 -0
  20. package/dist/core/__tests__/trimWithAnsi.spec.ts +40 -0
  21. package/dist/core/api/ssr.ts +63 -0
  22. package/dist/core/assets/extractAssetsQuery.ts +29 -0
  23. package/dist/core/assets/index.ts +173 -0
  24. package/dist/core/assets/inferHtmlTags.ts +61 -0
  25. package/dist/core/assets/injectHtmlTags.ts +236 -0
  26. package/dist/core/assets/mergeScriptTags.ts +77 -0
  27. package/dist/core/assets/sanitizeJson.ts +8 -0
  28. package/dist/core/cli/bin.ts +161 -0
  29. package/dist/core/cli/commands/add.ts +158 -0
  30. package/dist/core/cli/commands/check.ts +47 -0
  31. package/dist/core/cli/commands/doctor/checks/build.ts +83 -0
  32. package/dist/core/cli/commands/doctor/checks/config.ts +130 -0
  33. package/dist/core/cli/commands/doctor/checks/dependencies.ts +144 -0
  34. package/dist/core/cli/commands/doctor/checks/practices.ts +156 -0
  35. package/dist/core/cli/commands/doctor/checks/structure.ts +127 -0
  36. package/dist/core/cli/commands/doctor/fixes/index.ts +136 -0
  37. package/dist/core/cli/commands/doctor/index.ts +47 -0
  38. package/dist/core/cli/commands/doctor/print.ts +44 -0
  39. package/dist/core/cli/commands/doctor/types.ts +16 -0
  40. package/dist/core/cli/commands/fix.ts +161 -0
  41. package/dist/core/cli/commands/init.ts +145 -0
  42. package/dist/core/cli/commands/upgrade.ts +115 -0
  43. package/dist/core/cli/onLoad.ts +7 -0
  44. package/dist/core/cli/utils.ts +6 -0
  45. package/dist/core/components/Config/Config-client.ts +14 -0
  46. package/dist/core/components/Config/Config-server.ts +16 -0
  47. package/dist/core/components/Head/Head-client.ts +4 -0
  48. package/dist/core/components/Head/Head-server.ts +16 -0
  49. package/dist/core/components/Loading.tsx +23 -0
  50. package/dist/core/config/findPageConfig.ts +14 -0
  51. package/dist/core/config/loadConfigValues.ts +28 -0
  52. package/dist/core/constants/UnifiedConstants.ts +348 -0
  53. package/dist/core/dom/applyHeadSettings.tsx +13 -0
  54. package/dist/core/dom/onPageVisibilityChange.ts +17 -0
  55. package/dist/core/dom/updateDocumentHead.ts +15 -0
  56. package/dist/core/errors/ErrorHandler.ts +480 -0
  57. package/dist/core/files/file-system/filesystemPath.ts +27 -0
  58. package/dist/core/files/file-system/findFile.ts +35 -0
  59. package/dist/core/files/file-system/findPackageJson.ts +19 -0
  60. package/dist/core/files/file-system/findPageFiles.ts +40 -0
  61. package/dist/core/files/file-system/pathShim.ts +16 -0
  62. package/dist/core/files/file-system/prependEntriesDir.ts +13 -0
  63. package/dist/core/files/file-system/removeFileExtention.ts +3 -0
  64. package/dist/core/files/file-system/requireResolve.ts +59 -0
  65. package/dist/core/files/file-system/scanCodebase.ts +64 -0
  66. package/dist/core/files/virtual-files/index.ts +31 -0
  67. package/dist/core/files/virtual-files/virtualFileImportUserCode.ts +34 -0
  68. package/dist/core/files/virtual-files/virtualFilePageConfigValuesAll.ts +49 -0
  69. package/dist/core/gaurds/assertions/assert/base.ts +6 -0
  70. package/dist/core/gaurds/assertions/assert/index.ts +2 -0
  71. package/dist/core/gaurds/assertions/assert/log.ts +42 -0
  72. package/dist/core/gaurds/assertions/assertArguments.ts +83 -0
  73. package/dist/core/gaurds/assertions/assertCast.ts +9 -0
  74. package/dist/core/gaurds/assertions/assertCommonJS/base.ts +9 -0
  75. package/dist/core/gaurds/assertions/assertCommonJS/common.ts +30 -0
  76. package/dist/core/gaurds/assertions/assertCommonJS/index.ts +2 -0
  77. package/dist/core/gaurds/assertions/assertExtensions/base.ts +187 -0
  78. package/dist/core/gaurds/assertions/assertExtensions/index.ts +1 -0
  79. package/dist/core/gaurds/assertions/assertHookReturnedObject.ts +30 -0
  80. package/dist/core/gaurds/assertions/assertInfo/base.ts +14 -0
  81. package/dist/core/gaurds/assertions/assertInfo/index.ts +2 -0
  82. package/dist/core/gaurds/assertions/assertInfo/log.ts +28 -0
  83. package/dist/core/gaurds/assertions/assertIs404.ts +12 -0
  84. package/dist/core/gaurds/assertions/assertIsBrowser/base.ts +8 -0
  85. package/dist/core/gaurds/assertions/assertIsBrowser/index.ts +1 -0
  86. package/dist/core/gaurds/assertions/assertIsNotBrowser/base.ts +9 -0
  87. package/dist/core/gaurds/assertions/assertIsNotBrowser/index.ts +1 -0
  88. package/dist/core/gaurds/assertions/assertIsNotProductionRuntime/base.ts +71 -0
  89. package/dist/core/gaurds/assertions/assertIsNotProductionRuntime/index.ts +1 -0
  90. package/dist/core/gaurds/assertions/assertKeys/base.ts +31 -0
  91. package/dist/core/gaurds/assertions/assertKeys/index.ts +1 -0
  92. package/dist/core/gaurds/assertions/assertNoInfiniteHttpRedirect.ts +55 -0
  93. package/dist/core/gaurds/assertions/assertNodeEnv/base.ts +120 -0
  94. package/dist/core/gaurds/assertions/assertNodeEnv/index.ts +1 -0
  95. package/dist/core/gaurds/assertions/assertNodeVersion/base.ts +11 -0
  96. package/dist/core/gaurds/assertions/assertNodeVersion/index.ts +1 -0
  97. package/dist/core/gaurds/assertions/assertOnBeforeRenderHookReturn.ts +37 -0
  98. package/dist/core/gaurds/assertions/assertPageContextProvidedByUser.ts +60 -0
  99. package/dist/core/gaurds/assertions/assertPluginManifest.ts +41 -0
  100. package/dist/core/gaurds/assertions/assertPlusFileExport.ts +66 -0
  101. package/dist/core/gaurds/assertions/assertRoutingType/base.ts +41 -0
  102. package/dist/core/gaurds/assertions/assertRoutingType/index.ts +1 -0
  103. package/dist/core/gaurds/assertions/assertRuntimeManifest.ts +34 -0
  104. package/dist/core/gaurds/assertions/assertSingleInstance/index.ts +142 -0
  105. package/dist/core/gaurds/assertions/assertSingleInstance/onAssertModuleLoad.ts +0 -0
  106. package/dist/core/gaurds/assertions/assertSingleInstance/onClientEntryClientRouting.ts +0 -0
  107. package/dist/core/gaurds/assertions/assertSingleInstance/onClientEntryServerRouting.ts +0 -0
  108. package/dist/core/gaurds/assertions/assertType.ts +12 -0
  109. package/dist/core/gaurds/assertions/assertUsage/base.ts +43 -0
  110. package/dist/core/gaurds/assertions/assertUsage/index.ts +3 -0
  111. package/dist/core/gaurds/assertions/assertUsage/log.ts +29 -0
  112. package/dist/core/gaurds/assertions/assertUsage/node.ts +16 -0
  113. package/dist/core/gaurds/assertions/assertV1Design.ts +29 -0
  114. package/dist/core/gaurds/assertions/assertVersion/base.ts +55 -0
  115. package/dist/core/gaurds/assertions/assertVersion/index.ts +1 -0
  116. package/dist/core/gaurds/assertions/assertWarning/base.ts +43 -0
  117. package/dist/core/gaurds/assertions/assertWarning/index.ts +2 -0
  118. package/dist/core/gaurds/assertions/assertWarning/log.ts +43 -0
  119. package/dist/core/gaurds/assertions/checkType.ts +2 -0
  120. package/dist/core/gaurds/debugger/createDebugger.ts +196 -0
  121. package/dist/core/gaurds/debugger/debugPageFiles.ts +121 -0
  122. package/dist/core/gaurds/debugger/index.ts +2 -0
  123. package/dist/core/gaurds/errors/createErrorWithCleanStackTrace.ts +56 -0
  124. package/dist/core/gaurds/errors/removeErrMsg.ts +8 -0
  125. package/dist/core/gaurds/logger/addOnBeforeLogHook/index.ts +7 -0
  126. package/dist/core/gaurds/logger/formatHintLog.ts +17 -0
  127. package/dist/core/gaurds/logger/log404/index.spec.snapshot-1 +8 -0
  128. package/dist/core/gaurds/logger/log404/index.spec.snapshot-2 +9 -0
  129. package/dist/core/gaurds/logger/log404/index.spec.ts +78 -0
  130. package/dist/core/gaurds/logger/log404/index.ts +208 -0
  131. package/dist/core/gaurds/logger/logErrorHint/errors.ts +17 -0
  132. package/dist/core/gaurds/logger/logErrorHint/getErrorHint.spec.ts +1057 -0
  133. package/dist/core/gaurds/logger/logErrorHint.ts +196 -0
  134. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errBabelReact.ts +16 -0
  135. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errBabelSolid.ts +16 -0
  136. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errEsbuild.ts +39 -0
  137. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errMdx1.ts +24 -0
  138. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errMdx2.ts +83 -0
  139. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errPostcss.ts +33 -0
  140. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwc.ts +20 -0
  141. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwcBig.ts +19 -0
  142. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueCss.ts +36 -0
  143. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueHtml.ts +17 -0
  144. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueJavascript.ts +16 -0
  145. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/getPrettyErrMessage.spec.ts +101 -0
  146. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet/getPrettyErrorWithCodeSnippet.spec.ts +232 -0
  147. package/dist/core/gaurds/logger/loggerNotProd/errorWithCodeSnippet.ts +212 -0
  148. package/dist/core/gaurds/logger/loggerNotProd/log.ts +124 -0
  149. package/dist/core/gaurds/logger/loggerNotProd.ts +271 -0
  150. package/dist/core/gaurds/logger/loggerProd.ts +37 -0
  151. package/dist/core/gaurds/logger/loggerRuntime.ts +46 -0
  152. package/dist/core/gaurds/logger/loggerVite/removeSuperfluousViteLog.ts +30 -0
  153. package/dist/core/gaurds/logger/loggerVite.ts +65 -0
  154. package/dist/core/gaurds/logger/overwriteAssertProductionLogger/index.ts +9 -0
  155. package/dist/core/gaurds/logger/trackLogs.ts +35 -0
  156. package/dist/core/gaurds/logger/warnIfErrorIsNotObject.ts +31 -0
  157. package/dist/core/gaurds/normalization/freezePartial.ts +39 -0
  158. package/dist/core/gaurds/normalization/normalizeHeaders.ts +20 -0
  159. package/dist/core/gaurds/normalization/normalizeLink.tsx +14 -0
  160. package/dist/core/gaurds/normalization/normalizeUrlArgument.ts +22 -0
  161. package/dist/core/gaurds/validators/hasProp.ts +116 -0
  162. package/dist/core/gaurds/validators/isArray.ts +4 -0
  163. package/dist/core/gaurds/validators/isArrayOfStrings.ts +7 -0
  164. package/dist/core/gaurds/validators/isAsset.ts +43 -0
  165. package/dist/core/gaurds/validators/isBrowser.ts +5 -0
  166. package/dist/core/gaurds/validators/isBug.ts +5 -0
  167. package/dist/core/gaurds/validators/isCallable.ts +11 -0
  168. package/dist/core/gaurds/validators/isClientSideRoutable.ts +19 -0
  169. package/dist/core/gaurds/validators/isConfigInvalid.ts +10 -0
  170. package/dist/core/gaurds/validators/isDev.ts +56 -0
  171. package/dist/core/gaurds/validators/isErrorDebug.ts +7 -0
  172. package/dist/core/gaurds/validators/isErrorPage.ts +16 -0
  173. package/dist/core/gaurds/validators/isFilePathAbsoluteFilesystem.ts +55 -0
  174. package/dist/core/gaurds/validators/isHtml.ts +9 -0
  175. package/dist/core/gaurds/validators/isNewError.ts +29 -0
  176. package/dist/core/gaurds/validators/isNodeJS.ts +10 -0
  177. package/dist/core/gaurds/validators/isNotFalse.ts +3 -0
  178. package/dist/core/gaurds/validators/isNotNullish.ts +2 -0
  179. package/dist/core/gaurds/validators/isNpmPackage.ts +127 -0
  180. package/dist/core/gaurds/validators/isObject.ts +3 -0
  181. package/dist/core/gaurds/validators/isObjectOfStrings.ts +9 -0
  182. package/dist/core/gaurds/validators/isObjectWithKeys.ts +18 -0
  183. package/dist/core/gaurds/validators/isPlainObject.ts +21 -0
  184. package/dist/core/gaurds/validators/isPromise.ts +9 -0
  185. package/dist/core/gaurds/validators/isPropertyGetter.ts +4 -0
  186. package/dist/core/gaurds/validators/isReact.ts +24 -0
  187. package/dist/core/gaurds/validators/isReactElement.ts +21 -0
  188. package/dist/core/gaurds/validators/isRevealApp.ts +4 -0
  189. package/dist/core/gaurds/validators/isSameErrorMessage.ts +8 -0
  190. package/dist/core/gaurds/validators/isScriptFile.ts +75 -0
  191. package/dist/core/gaurds/validators/isServerSideError.ts +1 -0
  192. package/dist/core/gaurds/validators/isViteCliCall.ts +93 -0
  193. package/dist/core/gaurds/validators/isVitest.ts +7 -0
  194. package/dist/core/gaurds/validators/rollupIsEsm.ts +14 -0
  195. package/dist/core/gaurds/validators/viteIsSSR.ts +23 -0
  196. package/dist/core/globals/contexts/globalContext/getPageFilesExports.ts +28 -0
  197. package/dist/core/globals/contexts/globalContext/index.ts +374 -0
  198. package/dist/core/globals/contexts/globalContext/loadImportBuild.ts +44 -0
  199. package/dist/core/globals/contexts/globalContext/setup.ts +4 -0
  200. package/dist/core/globals/contexts/index.ts +1 -0
  201. package/dist/core/globals/logger/index.ts +1 -0
  202. package/dist/core/globals/logger/numberOfStackTraceLinesToRemove.ts +3 -0
  203. package/dist/core/globals/objects/index.ts +1 -0
  204. package/dist/core/globals/objects/log.ts +24 -0
  205. package/dist/core/globals/patterns/styleFileRE.ts +3 -0
  206. package/dist/core/globals/tags/addPrefixAssertType.ts +11 -0
  207. package/dist/core/globals/tags/addPrefixProjectName.ts +9 -0
  208. package/dist/core/globals/tags/projectTag.ts +3 -0
  209. package/dist/core/globals/tags/projectTagWithVersion.ts +5 -0
  210. package/dist/core/globals/versions/PROJECT_VERSION.ts +2 -0
  211. package/dist/core/globals/versions/projectInfo.ts +5 -0
  212. package/dist/core/handlers/handleErrorWithoutErrorPage.ts +70 -0
  213. package/dist/core/handlers/handlePageContext.ts +15 -0
  214. package/dist/core/handlers/handlePageContextRequestUrl.ts +56 -0
  215. package/dist/core/handlers/openFacebook.ts +20 -0
  216. package/dist/core/hocs/clientOnly.tsx +130 -0
  217. package/dist/core/hooks/callCumulativeHooks.ts +22 -0
  218. package/dist/core/hooks/executeHook.ts +118 -0
  219. package/dist/core/hooks/useConfig/configsCumulative.ts +6 -0
  220. package/dist/core/hooks/useConfig/useConfig-client.ts +82 -0
  221. package/dist/core/hooks/useConfig/useConfig-server.ts +152 -0
  222. package/dist/core/hydration/progressive.ts +252 -0
  223. package/dist/core/index.ts +60 -0
  224. package/dist/core/islands/index.tsx +198 -0
  225. package/dist/core/logging/UnifiedLoggerV2.ts +555 -0
  226. package/dist/core/logging/index.ts +80 -0
  227. package/dist/core/logging/plugins/FilePlugin.ts +132 -0
  228. package/dist/core/logging/plugins/PayloadCMSPlugin.ts +71 -0
  229. package/dist/core/logging/plugins/RemotePlugin.ts +110 -0
  230. package/dist/core/logging/plugins/index.ts +11 -0
  231. package/dist/core/naming/UnifiedNaming.ts +424 -0
  232. package/dist/core/observability/logger.ts +195 -0
  233. package/dist/core/observability/metrics.ts +156 -0
  234. package/dist/core/processing/getters/getAssertErrMsg.ts +49 -0
  235. package/dist/core/processing/getters/getAssetsDir.ts +11 -0
  236. package/dist/core/processing/getters/getBaseServer.ts +16 -0
  237. package/dist/core/processing/getters/getCacheControl.ts +26 -0
  238. package/dist/core/processing/getters/getConfigDefinedAt.ts +73 -0
  239. package/dist/core/processing/getters/getConfigReveal.ts +14 -0
  240. package/dist/core/processing/getters/getConfigValue.ts +68 -0
  241. package/dist/core/processing/getters/getConfigValueBuildTime.ts +92 -0
  242. package/dist/core/processing/getters/getConfigValueFilePathToShowToUser.ts +17 -0
  243. package/dist/core/processing/getters/getCurrentUrl.ts +42 -0
  244. package/dist/core/processing/getters/getEarlyHints.ts +58 -0
  245. package/dist/core/processing/getters/getEnv.ts +33 -0
  246. package/dist/core/processing/getters/getErrorPageId.ts +23 -0
  247. package/dist/core/processing/getters/getExportPath.spec.ts +34 -0
  248. package/dist/core/processing/getters/getExportPath.ts +33 -0
  249. package/dist/core/processing/getters/getFileExtension.ts +19 -0
  250. package/dist/core/processing/getters/getFilePath.ts +269 -0
  251. package/dist/core/processing/getters/getGlobalObject.ts +53 -0
  252. package/dist/core/processing/getters/getHeadSetting.tsx +36 -0
  253. package/dist/core/processing/getters/getHook.ts +222 -0
  254. package/dist/core/processing/getters/getHookFilePathToShowToUser.ts +12 -0
  255. package/dist/core/processing/getters/getHtmlTags.ts +341 -0
  256. package/dist/core/processing/getters/getHttpRequestAsyncStore.ts +122 -0
  257. package/dist/core/processing/getters/getHttpResponseBody.ts +177 -0
  258. package/dist/core/processing/getters/getMostSimilar.ts +72 -0
  259. package/dist/core/processing/getters/getOutDirs.ts +160 -0
  260. package/dist/core/processing/getters/getPageAssets/getManifestEntry.ts +164 -0
  261. package/dist/core/processing/getters/getPageAssets/retrieveAssetsDev.ts +96 -0
  262. package/dist/core/processing/getters/getPageAssets/retrieveAssetsProd.ts +86 -0
  263. package/dist/core/processing/getters/getPageAssets/sortPageAssetsForEarlyHintsHeader.ts +40 -0
  264. package/dist/core/processing/getters/getPageAssets.ts +140 -0
  265. package/dist/core/processing/getters/getPageConfig.ts +14 -0
  266. package/dist/core/processing/getters/getPageContext.ts +64 -0
  267. package/dist/core/processing/getters/getPageContextCurrent.ts +19 -0
  268. package/dist/core/processing/getters/getPageContextFromHooks.ts +335 -0
  269. package/dist/core/processing/getters/getPageContextProxyForUser.ts +97 -0
  270. package/dist/core/processing/getters/getPageContextRequestUrl.ts +22 -0
  271. package/dist/core/processing/getters/getPageContextSerializedInHtml.ts +32 -0
  272. package/dist/core/processing/getters/getPageContextUrlComputed.ts +410 -0
  273. package/dist/core/processing/getters/getPageElement.tsx +148 -0
  274. package/dist/core/processing/getters/getPageFiles/analyzeClientSide.ts +50 -0
  275. package/dist/core/processing/getters/getPageFiles/analyzePageServerSide.ts +32 -0
  276. package/dist/core/processing/getters/getPageFiles/getExportNames.ts +16 -0
  277. package/dist/core/processing/getters/getPageFiles/getExports.ts +193 -0
  278. package/dist/core/processing/getters/getPageFiles/index.ts +9 -0
  279. package/dist/core/processing/getters/getPageFiles/parseGlobResults.ts +167 -0
  280. package/dist/core/processing/getters/getPageFiles/setPageFiles.ts +76 -0
  281. package/dist/core/processing/getters/getPrefetchSettingResolved.ts.ts +87 -0
  282. package/dist/core/processing/getters/getProjectError.ts +18 -0
  283. package/dist/core/processing/getters/getPropAccessNotation.ts +10 -0
  284. package/dist/core/processing/getters/getRandomId.ts +15 -0
  285. package/dist/core/processing/getters/getRevalidationKey.ts +5 -0
  286. package/dist/core/processing/getters/getRevealClientEntry.ts +7 -0
  287. package/dist/core/processing/getters/getRevealConfig/configDefinitionsBuiltIn.ts +711 -0
  288. package/dist/core/processing/getters/getRevealConfig/crawlPlusFiles.ts +409 -0
  289. package/dist/core/processing/getters/getRevealConfig/filesystemRouting.spec.ts +40 -0
  290. package/dist/core/processing/getters/getRevealConfig/filesystemRouting.ts +286 -0
  291. package/dist/core/processing/getters/getRevealConfig/index.ts +1641 -0
  292. package/dist/core/processing/getters/getRevealConfig/loadFileAtConfigTime.ts +181 -0
  293. package/dist/core/processing/getters/getRevealConfig/resolvePointerImport.ts +240 -0
  294. package/dist/core/processing/getters/getRevealConfig/transformPointerImports.spec.ts +30 -0
  295. package/dist/core/processing/getters/getRevealConfig/transformPointerImports.ts +244 -0
  296. package/dist/core/processing/getters/getRevealConfig/transpileAndExecuteFile.ts +490 -0
  297. package/dist/core/processing/getters/getTagAttributesString.ts +27 -0
  298. package/dist/core/processing/getters/getTerminWidth.ts +9 -0
  299. package/dist/core/processing/getters/getValuePrintable.ts +6 -0
  300. package/dist/core/processing/getters/getViteDevScript.ts +47 -0
  301. package/dist/core/processing/iterators/analyzePage.ts +65 -0
  302. package/dist/core/processing/iterators/includes.ts +10 -0
  303. package/dist/core/processing/iterators/index.ts +2 -0
  304. package/dist/core/processing/iterators/objectKeys.ts +6 -0
  305. package/dist/core/processing/parsers/parseEsModule.ts +43 -0
  306. package/dist/core/processing/parsers/parseTransform.ts +36 -0
  307. package/dist/core/processing/serializers/notSerializable.ts +2 -0
  308. package/dist/core/processing/serializers/replaceWithParserPath.ts +30 -0
  309. package/dist/core/processing/serializers/serializePage/PageConfigSerialized.ts +45 -0
  310. package/dist/core/processing/serializers/serializePage/parsePageConfigs.ts +223 -0
  311. package/dist/core/processing/serializers/serializePage/serializeConfigValues.ts +336 -0
  312. package/dist/core/processing/serializers/serializePageContextClientSide.ts +179 -0
  313. package/dist/core/processing/serializers/stringify.ts +188 -0
  314. package/dist/core/processing/serializers/stringifyTypes.ts +103 -0
  315. package/dist/core/processing/setters/addIs404ToPageProps.ts +27 -0
  316. package/dist/core/processing/setters/setAlwaysShowStackTrace.ts +7 -0
  317. package/dist/core/processing/transformers/augmentType.ts +10 -0
  318. package/dist/core/processing/transformers/rollupSourceMap.ts +23 -0
  319. package/dist/core/processing/transformers/slice.ts +52 -0
  320. package/dist/core/renderer/page/executeOnBeforeRenderAndDataHooks.ts +53 -0
  321. package/dist/core/renderer/page/executeOnRenderHtmlHook.ts +261 -0
  322. package/dist/core/renderer/page/index.ts +804 -0
  323. package/dist/core/renderer/page/inferMediaType.ts +128 -0
  324. package/dist/core/renderer/page/loadUserFilesServerSide.ts +154 -0
  325. package/dist/core/renderer/page/preparePageContextForUserConsumption.ts +55 -0
  326. package/dist/core/renderer/page/preparePageContextForUserConsumptionServerSide.ts +38 -0
  327. package/dist/core/renderer/page/renderPageAlreadyRouted.ts +373 -0
  328. package/dist/core/renderer/page/resolveRedirects.ts +75 -0
  329. package/dist/core/renderer/prerender/index.ts +1 -0
  330. package/dist/core/renderer/prerender/runPrerender.ts +1141 -0
  331. package/dist/core/renderer/prerender/utils.ts +22 -0
  332. package/dist/core/renderer/stream/html.ts +408 -0
  333. package/dist/core/renderer/stream/index.ts +1001 -0
  334. package/dist/core/renderer/stream/onLoad.ts +14 -0
  335. package/dist/core/renderer/stream/react-streaming.ts +69 -0
  336. package/dist/core/renderer/stream/utils.ts +66 -0
  337. package/dist/core/resilience/circuit-breaker.ts +212 -0
  338. package/dist/core/resilience/retry.ts +172 -0
  339. package/dist/core/result/adapters.ts +254 -0
  340. package/dist/core/result.ts +332 -0
  341. package/dist/core/router/abort.ts +339 -0
  342. package/dist/core/router/apiRoutes.ts +94 -0
  343. package/dist/core/router/debug.ts +19 -0
  344. package/dist/core/router/deduceRouteStringFromFilesystemPath.ts +75 -0
  345. package/dist/core/router/dynamicApiRoutes.ts +18 -0
  346. package/dist/core/router/dynamicPageRoutes.ts +18 -0
  347. package/dist/core/router/executeGuardHook.ts +45 -0
  348. package/dist/core/router/executeOnBeforeRouteHook.ts +161 -0
  349. package/dist/core/router/index.ts +230 -0
  350. package/dist/core/router/loadPageRoutes.ts +155 -0
  351. package/dist/core/router/noRouteMatch.ts +1 -0
  352. package/dist/core/router/pageRoutes.ts +159 -0
  353. package/dist/core/router/resolvePrecedence.ts +128 -0
  354. package/dist/core/router/resolveRoute.ts +29 -0
  355. package/dist/core/router/resolveRouteFunction.ts +193 -0
  356. package/dist/core/router/resolveRouteString.ts +204 -0
  357. package/dist/core/router/resolveRouteUtils.ts +77 -0
  358. package/dist/core/router/resolveUrlPathname.ts +67 -0
  359. package/dist/core/router/routeInternal.ts +97 -0
  360. package/dist/core/router/utils.ts +30 -0
  361. package/dist/core/services/BaseService.ts +403 -0
  362. package/dist/core/targets/client/abort.ts +11 -0
  363. package/dist/core/targets/client/createPageContext.ts +48 -0
  364. package/dist/core/targets/client/entry.ts +15 -0
  365. package/dist/core/targets/client/executeOnRenderClientHook.ts +94 -0
  366. package/dist/core/targets/client/history.ts +142 -0
  367. package/dist/core/targets/client/index.ts +9 -0
  368. package/dist/core/targets/client/initClientRouter.ts +48 -0
  369. package/dist/core/targets/client/initOnLinkClick.ts +54 -0
  370. package/dist/core/targets/client/loadUserFilesClientSide.ts +92 -0
  371. package/dist/core/targets/client/navigate.ts +45 -0
  372. package/dist/core/targets/client/onBrowserHistoryNavigation.ts +85 -0
  373. package/dist/core/targets/client/onLoad.ts +10 -0
  374. package/dist/core/targets/client/pageContextInitIsPassedToClient.ts +2 -0
  375. package/dist/core/targets/client/pageFiles.ts +4 -0
  376. package/dist/core/targets/client/prefetch.ts +399 -0
  377. package/dist/core/targets/client/preparePageContextForUserConsumptionClientSide.ts +48 -0
  378. package/dist/core/targets/client/removeBuiltInOverrides.ts +37 -0
  379. package/dist/core/targets/client/removeFoucBuster.ts +70 -0
  380. package/dist/core/targets/client/renderPageClientSide.ts +1817 -0
  381. package/dist/core/targets/client/router.ts +15 -0
  382. package/dist/core/targets/client/scrollRestoration.ts +37 -0
  383. package/dist/core/targets/client/setScrollPosition.ts +87 -0
  384. package/dist/core/targets/client/skipLink.ts +63 -0
  385. package/dist/core/targets/client/utils.ts +34 -0
  386. package/dist/core/targets/http/createHttpResponse.ts +254 -0
  387. package/dist/core/targets/http/fetchBanner.ts +25 -0
  388. package/dist/core/targets/http/fetchCard.ts +25 -0
  389. package/dist/core/targets/http/fetchEvents.ts +25 -0
  390. package/dist/core/targets/http/fetchHero.ts +25 -0
  391. package/dist/core/targets/http/fetchMainInfos.ts +25 -0
  392. package/dist/core/targets/http/fetchPage.ts +78 -0
  393. package/dist/core/targets/http/fetchPages.ts +70 -0
  394. package/dist/core/targets/http/fetchVideos.ts +26 -0
  395. package/dist/core/targets/http/fetchYouTube.ts +90 -0
  396. package/dist/core/targets/server/entry.ts +43 -0
  397. package/dist/core/targets/server/middleware/addSsrMiddleware.ts +52 -0
  398. package/dist/core/targets/server/onLoad.ts +7 -0
  399. package/dist/core/targets/server/pageFiles.ts +4 -0
  400. package/dist/core/targets/server/root.ts +10 -0
  401. package/dist/core/targets/server/utils.ts +20 -0
  402. package/dist/core/targets/url/index.ts +439 -0
  403. package/dist/core/targets/url/modifyUrl.ts +45 -0
  404. package/dist/core/targets/url/parseUrl.ts +440 -0
  405. package/dist/core/targets/url/parseUrlExtras.ts +193 -0
  406. package/dist/core/targets/url/redirectHard.ts +3 -0
  407. package/dist/core/targets/url/updateCurrentPath.ts +52 -0
  408. package/dist/core/targets/url/urlToFile.ts +47 -0
  409. package/dist/core/types/UnifiedTypes.ts +493 -0
  410. package/dist/core/types/contracts.ts +61 -0
  411. package/dist/core/types/generator.ts +316 -0
  412. package/dist/core/utils/array/includes.ts +10 -0
  413. package/dist/core/utils/array/slice.ts +52 -0
  414. package/dist/core/utils/array/sorter.ts +130 -0
  415. package/dist/core/utils/array/stringifyStringArray.ts +7 -0
  416. package/dist/core/utils/array/unique.ts +5 -0
  417. package/dist/core/utils/async/genPromise.ts +8 -0
  418. package/dist/core/utils/async/pLimit.ts +157 -0
  419. package/dist/core/utils/async/sleep.ts +3 -0
  420. package/dist/core/utils/async/throttle.ts +14 -0
  421. package/dist/core/utils/index.ts +31 -0
  422. package/dist/core/utils/object/changeEnumerable.ts +9 -0
  423. package/dist/core/utils/object/deepEqual.ts +10 -0
  424. package/dist/core/utils/object/objectAssign.ts +16 -0
  425. package/dist/core/utils/object/objectDefineProperty.ts +15 -0
  426. package/dist/core/utils/object/objectEntries.ts +7 -0
  427. package/dist/core/utils/object/objectEntriesForEach.ts +7 -0
  428. package/dist/core/utils/object/objectFromEntries.ts +6 -0
  429. package/dist/core/utils/string/addWhitespace.ts +9 -0
  430. package/dist/core/utils/string/capitalizeFirstLetter.ts +8 -0
  431. package/dist/core/utils/string/compareString.ts +7 -0
  432. package/dist/core/utils/string/escapeHtml.ts +10 -0
  433. package/dist/core/utils/string/escapeRegex.ts +4 -0
  434. package/dist/core/utils/string/joinEnglish.ts +18 -0
  435. package/dist/core/utils/string/removeEmptyLines.ts +6 -0
  436. package/dist/core/utils/string/stripAnsi.ts +24 -0
  437. package/dist/core/utils/string/trimWithAnsi.ts +40 -0
  438. package/dist/core/utils/string/truncateString.ts +19 -0
  439. package/dist/core/utils/time/humanizeTime.ts +24 -0
  440. package/dist/exports/RenderErrorPage.js +3 -0
  441. package/dist/exports/__internal.js +3 -0
  442. package/dist/exports/abort.js +3 -0
  443. package/dist/exports/bin-entry.js +3 -0
  444. package/dist/exports/cli.js +3 -0
  445. package/dist/exports/client.js +3 -0
  446. package/dist/exports/config.js +1 -0
  447. package/dist/exports/helpers.js +1 -0
  448. package/dist/exports/index.js +33 -0
  449. package/dist/exports/plugin.js +3 -0
  450. package/dist/exports/prerender.js +3 -0
  451. package/dist/exports/router.js +3 -0
  452. package/dist/exports/routing.js +3 -0
  453. package/dist/exports/server.js +3 -0
  454. package/dist/exports/setup.js +3 -0
  455. package/dist/exports/types.js +1 -0
  456. package/dist/index.d.ts +1 -0
  457. package/dist/index.js +33 -0
  458. package/dist/integration/hydration.ts +52 -0
  459. package/dist/integration/onRenderClient.tsx +377 -0
  460. package/dist/integration/onRenderHtml.tsx +761 -0
  461. package/dist/integration/ssrEffect.ts +31 -0
  462. package/dist/integration/styles.css +141 -0
  463. package/dist/plugins/baseUrls.ts +54 -0
  464. package/dist/plugins/buildConfig/index.ts +701 -0
  465. package/dist/plugins/buildConfig/injectRollupInputs.ts +36 -0
  466. package/dist/plugins/commonConfig.ts +112 -0
  467. package/dist/plugins/config/assertResolveAlias.ts +99 -0
  468. package/dist/plugins/config/assertRevealConfig.ts +116 -0
  469. package/dist/plugins/config/fixServerAssets.ts +213 -0
  470. package/dist/plugins/config/index.ts +227 -0
  471. package/dist/plugins/config/pickFirst.ts +3 -0
  472. package/dist/plugins/config/resolveBase.ts +78 -0
  473. package/dist/plugins/devConfig/determineFsAllowList.ts +34 -0
  474. package/dist/plugins/devConfig/determineOptimizeDeps.ts +129 -0
  475. package/dist/plugins/devConfig/index.ts +222 -0
  476. package/dist/plugins/distFileNames.ts +341 -0
  477. package/dist/plugins/envVars.ts +150 -0
  478. package/dist/plugins/extractAssetsPlugin.ts +318 -0
  479. package/dist/plugins/extractExportNamesPlugin.ts +154 -0
  480. package/dist/plugins/fileEnv.ts +374 -0
  481. package/dist/plugins/importBuild/getRevealManifest.ts +20 -0
  482. package/dist/plugins/importBuild/index.ts +120 -0
  483. package/dist/plugins/importUserCode/addImportStatement.ts +32 -0
  484. package/dist/plugins/importUserCode/debug.ts +2 -0
  485. package/dist/plugins/importUserCode/getConfigFileExport.ts +24 -0
  486. package/dist/plugins/importUserCode/getVirtualFilePageConfigValuesAll.ts +95 -0
  487. package/dist/plugins/importUserCode/getVirtualFilePageConfigs.ts +150 -0
  488. package/dist/plugins/importUserCode/index.ts +375 -0
  489. package/dist/plugins/importUserCode/isRuntimeEnvMatch.ts +31 -0
  490. package/dist/plugins/index.ts +233 -0
  491. package/dist/plugins/onLoad.ts +12 -0
  492. package/dist/plugins/packageJsonFile.ts +62 -0
  493. package/dist/plugins/payload/index.ts +62 -0
  494. package/dist/plugins/previewConfig.ts +95 -0
  495. package/dist/plugins/react/index.ts +72 -0
  496. package/dist/plugins/removeRequireHookPlugin.ts +27 -0
  497. package/dist/plugins/resolveClientEntriesDev.ts +87 -0
  498. package/dist/plugins/reveal/index.ts +39 -0
  499. package/dist/plugins/reveal/remove-use-client-server.ts +52 -0
  500. package/dist/plugins/setGlobalContext.ts +53 -0
  501. package/dist/plugins/suppressRollupWarning.ts +94 -0
  502. package/dist/plugins/utils.ts +33 -0
  503. package/dist/plugins/vercel/+config.ts +18 -0
  504. package/dist/plugins/vercel/functions/assert.ts +13 -0
  505. package/dist/plugins/vercel/functions/build.ts +484 -0
  506. package/dist/plugins/vercel/functions/config.ts +147 -0
  507. package/dist/plugins/vercel/functions/helpers.ts +70 -0
  508. package/dist/plugins/vercel/functions/prerender.ts +140 -0
  509. package/dist/plugins/vercel/functions/route-regex.ts +37 -0
  510. package/dist/plugins/vercel/functions/utils.ts +33 -0
  511. package/dist/plugins/vercel/functions/vike.ts +754 -0
  512. package/dist/plugins/vercel/index.ts +186 -0
  513. package/dist/plugins/vercel/plugin.ts +45 -0
  514. package/dist/plugins/vercel/schemas/config/prerender-config.ts +20 -0
  515. package/dist/plugins/vercel/schemas/config/vc-config.ts +45 -0
  516. package/dist/plugins/vercel/schemas/config/vercel.ts +130 -0
  517. package/dist/plugins/vercel/schemas/exports.ts +12 -0
  518. package/dist/plugins/vercel/templates/edge-helpers.ts +72 -0
  519. package/dist/plugins/vercel/templates/node-helpers.ts +60 -0
  520. package/dist/plugins/vercel/templates/ssr_.template.ts +25 -0
  521. package/dist/plugins/vercel/templates/ssr_edge_.template.ts +20 -0
  522. package/dist/plugins/vercel/templates/utils.ts +31 -0
  523. package/dist/plugins/workaroundCssModuleHmr.ts +23 -0
  524. package/dist/types/index.ts +50 -0
  525. package/dist/types/interfaces/app.ts +700 -0
  526. package/dist/types/interfaces/client.ts +10 -0
  527. package/dist/types/interfaces/config.ts +481 -0
  528. package/dist/types/interfaces/context.ts +677 -0
  529. package/dist/types/interfaces/error.ts +6 -0
  530. package/dist/types/interfaces/file.ts +98 -0
  531. package/dist/types/interfaces/host.ts +209 -0
  532. package/dist/types/interfaces/log.ts +3 -0
  533. package/dist/types/interfaces/logic.ts +46 -0
  534. package/dist/types/interfaces/manifest.ts +15 -0
  535. package/dist/types/interfaces/node.ts +8 -0
  536. package/dist/types/interfaces/page.ts +154 -0
  537. package/dist/types/interfaces/reveal.ts +118 -0
  538. package/dist/types/interfaces/tag.ts +3 -0
  539. package/dist/types/modules/assets.d.ts +57 -0
  540. package/dist/types/modules/env.d.ts +34 -0
  541. package/dist/types/modules/global.d.ts +10 -0
  542. package/dist/types/modules/index.d.ts +1 -0
  543. package/dist/types/modules/node.d.ts +2 -0
  544. package/dist/types/modules/payload.d.ts +2 -0
  545. package/dist/types/modules/reveal-vercel.d.ts +19 -0
  546. package/dist/types/modules/reveal.d.ts +1 -0
  547. package/dist/types/modules/stripe.d.ts +41 -0
  548. package/dist/types/modules/supabase.d.ts +19 -0
  549. package/dist/types/modules/tailwindcss.d.ts +49 -0
  550. package/dist/types/modules/vite.d.ts +7 -0
  551. package/dist/types/namespaces/Config.ts +291 -0
  552. package/dist/types/namespaces/PageContext.ts +23 -0
  553. package/dist/types/namespaces/RevealNamespace.ts +51 -0
  554. package/dist/types/namespaces/index.ts +3 -0
  555. package/dist/ui/accents/DiagonalGrid.tsx +36 -0
  556. package/dist/ui/accents/Glass.tsx +33 -0
  557. package/dist/ui/accents/Parallax.tsx +78 -0
  558. package/dist/ui/accents/Shadow.tsx +28 -0
  559. package/dist/ui/accents/index.tsx +4 -0
  560. package/dist/ui/accessibility/index.ts +168 -0
  561. package/dist/ui/ai/ChatGPTAssistant.tsx +113 -0
  562. package/dist/ui/ai/index.ts +3 -0
  563. package/dist/ui/animations/container.ts +7 -0
  564. package/dist/ui/animations/content.ts +16 -0
  565. package/dist/ui/animations/fade.ts +16 -0
  566. package/dist/ui/animations/index.ts +6 -0
  567. package/dist/ui/animations/slide.ts +23 -0
  568. package/dist/ui/animations/text.ts +14 -0
  569. package/dist/ui/animations/transition.ts +1 -0
  570. package/dist/ui/audio/AudioTrack.tsx +26 -0
  571. package/dist/ui/audio/index.tsx +1 -0
  572. package/dist/ui/backgrounds/Diagonal.tsx +46 -0
  573. package/dist/ui/backgrounds/GradientConic.tsx +21 -0
  574. package/dist/ui/backgrounds/GradientConicRev.tsx +50 -0
  575. package/dist/ui/backgrounds/GradientGlass.tsx +28 -0
  576. package/dist/ui/backgrounds/GradientRadial.tsx +37 -0
  577. package/dist/ui/backgrounds/GradientRadialLeft.tsx +33 -0
  578. package/dist/ui/backgrounds/GradientToBottom.tsx +59 -0
  579. package/dist/ui/backgrounds/GradientToTop.tsx +60 -0
  580. package/dist/ui/backgrounds/Solid.tsx +50 -0
  581. package/dist/ui/backgrounds/Straight.tsx +55 -0
  582. package/dist/ui/backgrounds/TopRight.tsx +15 -0
  583. package/dist/ui/backgrounds/Wrapper.tsx +33 -0
  584. package/dist/ui/backgrounds/index.tsx +12 -0
  585. package/dist/ui/buttons/Button.tsx +54 -0
  586. package/dist/ui/buttons/DisclosureButton.tsx +35 -0
  587. package/dist/ui/buttons/GradientButton.tsx +51 -0
  588. package/dist/ui/buttons/IconButton.tsx +24 -0
  589. package/dist/ui/buttons/LikeButton.tsx +221 -0
  590. package/dist/ui/buttons/MobileMenuButton.tsx +63 -0
  591. package/dist/ui/buttons/MusicButton.tsx +53 -0
  592. package/dist/ui/buttons/SignUpButton.tsx +18 -0
  593. package/dist/ui/buttons/index.tsx +8 -0
  594. package/dist/ui/cards/Card.tsx +255 -0
  595. package/dist/ui/cards/ProductCard.tsx +291 -0
  596. package/dist/ui/cards/VideoCard.tsx +201 -0
  597. package/dist/ui/cards/index.tsx +3 -0
  598. package/dist/ui/contexts/DisclosureContext.tsx +44 -0
  599. package/dist/ui/contexts/GlobalContext.tsx +67 -0
  600. package/dist/ui/contexts/MenuContext.tsx +8 -0
  601. package/dist/ui/contexts/PageContext.tsx +28 -0
  602. package/dist/ui/contexts/ThemeContext.tsx +195 -0
  603. package/dist/ui/controls/MusicHeader.tsx +484 -0
  604. package/dist/ui/controls/MusicPlayer.tsx +76 -0
  605. package/dist/ui/controls/MusicSidebar.tsx +118 -0
  606. package/dist/ui/controls/MusicSlider.tsx +25 -0
  607. package/dist/ui/controls/MusicUpload.tsx +296 -0
  608. package/dist/ui/controls/PlayPause.tsx +64 -0
  609. package/dist/ui/controls/PlayerContent.tsx +205 -0
  610. package/dist/ui/controls/SearchContent.tsx +58 -0
  611. package/dist/ui/controls/SearchInput.tsx +118 -0
  612. package/dist/ui/controls/Searchbar.tsx +53 -0
  613. package/dist/ui/controls/SidebarItem.tsx +57 -0
  614. package/dist/ui/controls/SongItem.tsx +45 -0
  615. package/dist/ui/controls/VideoPlayer.tsx +36 -0
  616. package/dist/ui/controls/index.tsx +13 -0
  617. package/dist/ui/dividers/Horizontal.tsx +18 -0
  618. package/dist/ui/dividers/Transparent.tsx +7 -0
  619. package/dist/ui/dividers/index.tsx +2 -0
  620. package/dist/ui/error/ErrorBoundary.tsx +150 -0
  621. package/dist/ui/error/index.tsx +1 -0
  622. package/dist/ui/forms/Input.tsx +38 -0
  623. package/dist/ui/forms/MediaItem.tsx +105 -0
  624. package/dist/ui/forms/index.tsx +2 -0
  625. package/dist/ui/game/Enemy.tsx +52 -0
  626. package/dist/ui/game/Fighters.tsx +38 -0
  627. package/dist/ui/game/GameControls.tsx +37 -0
  628. package/dist/ui/game/HealthBar.tsx +18 -0
  629. package/dist/ui/game/Player.tsx +70 -0
  630. package/dist/ui/game/index.tsx +5 -0
  631. package/dist/ui/hooks/useApiData.ts +57 -0
  632. package/dist/ui/hooks/useAuthModal.ts +18 -0
  633. package/dist/ui/hooks/useCart.ts +21 -0
  634. package/dist/ui/hooks/useChatGPT.ts +94 -0
  635. package/dist/ui/hooks/useCustomProps.ts +31 -0
  636. package/dist/ui/hooks/useData.ts +10 -0
  637. package/dist/ui/hooks/useDebounce.ts +52 -0
  638. package/dist/ui/hooks/useDisclosure.ts +8 -0
  639. package/dist/ui/hooks/useGame.ts +1147 -0
  640. package/dist/ui/hooks/useLayoutClasses.ts +70 -0
  641. package/dist/ui/hooks/useLazyLoad.ts +78 -0
  642. package/dist/ui/hooks/useLikeSong.ts +22 -0
  643. package/dist/ui/hooks/useLivePreview.ts +60 -0
  644. package/dist/ui/hooks/useMenu.ts +6 -0
  645. package/dist/ui/hooks/useOnPlay.ts +23 -0
  646. package/dist/ui/hooks/usePageContext.ts +174 -0
  647. package/dist/ui/hooks/useParallax.ts +161 -0
  648. package/dist/ui/hooks/usePreviewModal.ts +25 -0
  649. package/dist/ui/hooks/useScreenSize.ts +56 -0
  650. package/dist/ui/hooks/useTheme.ts +6 -0
  651. package/dist/ui/images/Carousel.tsx +326 -0
  652. package/dist/ui/images/Circle.tsx +9 -0
  653. package/dist/ui/images/Defs.tsx +7 -0
  654. package/dist/ui/images/Image.tsx +127 -0
  655. package/dist/ui/images/ImageGrid.tsx +73 -0
  656. package/dist/ui/images/Logo.tsx +22 -0
  657. package/dist/ui/images/Path.tsx +27 -0
  658. package/dist/ui/images/Pattern.tsx +70 -0
  659. package/dist/ui/images/PromoBanner.tsx +25 -0
  660. package/dist/ui/images/Rect.tsx +10 -0
  661. package/dist/ui/images/SVG.tsx +58 -0
  662. package/dist/ui/images/Stop.tsx +15 -0
  663. package/dist/ui/images/index.tsx +12 -0
  664. package/dist/ui/layouts/classNames.ts +8 -0
  665. package/dist/ui/layouts/container.ts +20 -0
  666. package/dist/ui/layouts/flex.ts +13 -0
  667. package/dist/ui/layouts/grid.ts +11 -0
  668. package/dist/ui/layouts/main.ts +31 -0
  669. package/dist/ui/layouts/responsive.ts +28 -0
  670. package/dist/ui/layouts/stack.ts +24 -0
  671. package/dist/ui/lists/DescriptionList.tsx +41 -0
  672. package/dist/ui/lists/DisclosurePanel.tsx +20 -0
  673. package/dist/ui/lists/JobOpeningsList.tsx +54 -0
  674. package/dist/ui/lists/List.tsx +18 -0
  675. package/dist/ui/lists/ListElements.tsx +43 -0
  676. package/dist/ui/lists/ListItem.tsx +63 -0
  677. package/dist/ui/lists/ProductList.tsx +37 -0
  678. package/dist/ui/lists/StatsList.tsx +64 -0
  679. package/dist/ui/lists/UList.tsx +54 -0
  680. package/dist/ui/lists/index.ts +9 -0
  681. package/dist/ui/navigation/DesktopMenu.tsx +14 -0
  682. package/dist/ui/navigation/Footer.tsx +128 -0
  683. package/dist/ui/navigation/Link.tsx +225 -0
  684. package/dist/ui/navigation/MobileMenu.tsx +26 -0
  685. package/dist/ui/navigation/NavigationLinks.tsx +244 -0
  686. package/dist/ui/navigation/NotFound.tsx +12 -0
  687. package/dist/ui/navigation/Route.tsx +120 -0
  688. package/dist/ui/navigation/Transition.tsx +40 -0
  689. package/dist/ui/navigation/index.tsx +8 -0
  690. package/dist/ui/notifications/Banner.tsx +69 -0
  691. package/dist/ui/notifications/Error.tsx +12 -0
  692. package/dist/ui/notifications/Loader.tsx +14 -0
  693. package/dist/ui/notifications/NoResults.tsx +11 -0
  694. package/dist/ui/notifications/index.tsx +4 -0
  695. package/dist/ui/providers/AppProvider.tsx +115 -0
  696. package/dist/ui/providers/DisclosureProvider.tsx +21 -0
  697. package/dist/ui/providers/MenuProvider.tsx +40 -0
  698. package/dist/ui/providers/PageContextProvider.tsx +176 -0
  699. package/dist/ui/providers/ThemeProvider.tsx +196 -0
  700. package/dist/ui/shells/App.tsx +57 -0
  701. package/dist/ui/shells/Container.tsx +74 -0
  702. package/dist/ui/shells/Disclosure.tsx +72 -0
  703. package/dist/ui/shells/Field.tsx +21 -0
  704. package/dist/ui/shells/Flex.tsx +193 -0
  705. package/dist/ui/shells/Grid.tsx +118 -0
  706. package/dist/ui/shells/Header.tsx +123 -0
  707. package/dist/ui/shells/Main.tsx +96 -0
  708. package/dist/ui/shells/Nav.tsx +138 -0
  709. package/dist/ui/shells/Section.tsx +94 -0
  710. package/dist/ui/shells/Skeleton.tsx +24 -0
  711. package/dist/ui/shells/index.ts +11 -0
  712. package/dist/ui/text/Article.tsx +141 -0
  713. package/dist/ui/text/Currency.tsx +29 -0
  714. package/dist/ui/text/Heading.tsx +29 -0
  715. package/dist/ui/text/Label.tsx +24 -0
  716. package/dist/ui/text/Motto.tsx +40 -0
  717. package/dist/ui/text/Paragraph.tsx +20 -0
  718. package/dist/ui/text/Span.tsx +20 -0
  719. package/dist/ui/text/TagLine.tsx +20 -0
  720. package/dist/ui/text/Time.tsx +36 -0
  721. package/dist/ui/text/WelcomeHeading.tsx +40 -0
  722. package/dist/ui/text/index.ts +10 -0
  723. package/dist/ui/video/VideoComponent.tsx +23 -0
  724. package/dist/ui/video/VideoDetail.tsx +33 -0
  725. package/dist/ui/video/VideoItem.tsx +51 -0
  726. package/dist/ui/video/VideoList.tsx +155 -0
  727. package/dist/ui/video/index.ts +4 -0
  728. package/package.json +721 -0
@@ -0,0 +1,1001 @@
1
+ export {
2
+ getStreamName,
3
+ getStreamReadableNode,
4
+ getStreamReadableWeb,
5
+ inferStreamName,
6
+ isStream,
7
+ isStreamPipeNode,
8
+ isStreamPipeWeb,
9
+ isStreamReadableNode,
10
+ isStreamReadableWeb,
11
+ isStreamWritableNode,
12
+ isStreamWritableWeb,
13
+ pipeStream,
14
+ pipeToStreamWritableNode,
15
+ pipeToStreamWritableWeb,
16
+ processStream,
17
+ stampPipe,
18
+ streamPipeNodeToString,
19
+ streamReadableWebToString,
20
+ streamToString,
21
+ }
22
+ export type {
23
+ StreamPipeNode,
24
+ StreamPipeWeb,
25
+ StreamProviderAny,
26
+ StreamProviderNormalized,
27
+ StreamReadableNode,
28
+ StreamReadableWeb,
29
+ StreamTypePatch,
30
+ StreamWritableNode,
31
+ StreamWritableWeb,
32
+ }
33
+
34
+ import { import_ } from "@brillout/import"
35
+ import pc from "@brillout/picocolors"
36
+ import type { Readable as Readable_, Writable as Writable_ } from "node:stream"
37
+ import { HtmlRender } from "./html.js"
38
+ import {
39
+ getStreamOfReactStreamingPackage,
40
+ isStreamFromReactStreamingPackage,
41
+ StreamFromReactStreamingPackagePublic,
42
+ streamFromReactStreamingPackageToString,
43
+ } from "./react-streaming.js"
44
+ import {
45
+ assert,
46
+ assertUsage,
47
+ assertWarning,
48
+ capitalizeFirstLetter,
49
+ checkType,
50
+ createDebugger,
51
+ hasProp,
52
+ isBug,
53
+ isCallable,
54
+ isObject,
55
+ objectAssign,
56
+ } from "./utils.js"
57
+
58
+ const debug = createDebugger("reveal:stream")
59
+
60
+ type StreamReadableWeb = ReadableStream
61
+ type StreamReadableNode = Readable_
62
+ type StreamWritableWeb = WritableStream
63
+ type StreamWritableNode = Writable_
64
+ type StreamPipeWeb = (writable: StreamWritableWeb) => void
65
+ type StreamPipeNode = (writable: StreamWritableNode) => void
66
+
67
+ type StreamProviderNormalized =
68
+ | StreamReadableWeb
69
+ | StreamReadableNode
70
+ // stampPipe()
71
+ | StreamPipeWeb
72
+ // stampPipe()
73
+ | StreamPipeNode
74
+ type StreamProviderAny =
75
+ | StreamProviderNormalized
76
+ | StreamFromReactStreamingPackagePublic
77
+
78
+ // Not needed but just to clarify StreamProvider vs StreamConsumer
79
+ type StreamConsumer = StreamWritableWeb | StreamWritableNode
80
+
81
+ // ReactDOMServer.renderToNodeStream() returns a NodeJS.ReadableStream which differs from Stream.Readable
82
+ type StreamTypePatch = NodeJS.ReadableStream
83
+
84
+ function isStreamReadableWeb(thing: unknown): thing is StreamReadableWeb {
85
+ return (
86
+ typeof ReadableStream !== "undefined" && thing instanceof ReadableStream
87
+ )
88
+ }
89
+ function isStreamWritableWeb(thing: unknown): thing is StreamWritableWeb {
90
+ return (
91
+ typeof WritableStream !== "undefined" && thing instanceof WritableStream
92
+ )
93
+ }
94
+ function isStreamReadableNode(thing: unknown): thing is StreamReadableNode {
95
+ if (isStreamReadableWeb(thing)) {
96
+ return false
97
+ }
98
+ // https://stackoverflow.com/questions/17009975/how-to-test-if-an-object-is-a-stream-in-nodejs/37022523#37022523
99
+ return hasProp(thing, "read", "function")
100
+ }
101
+ function isStreamWritableNode(thing: unknown): thing is StreamWritableNode {
102
+ if (isStreamWritableWeb(thing)) {
103
+ return false
104
+ }
105
+ // https://stackoverflow.com/questions/17009975/how-to-test-if-an-object-is-a-stream-in-nodejs/37022523#37022523
106
+ return hasProp(thing, "write", "function")
107
+ }
108
+
109
+ async function streamReadableNodeToString(
110
+ readableNode: StreamReadableNode
111
+ ): Promise<string> {
112
+ // Copied from: https://stackoverflow.com/questions/10623798/how-do-i-read-the-contents-of-a-node-js-stream-into-a-string-variable/49428486#49428486
113
+ const chunks: Buffer[] = []
114
+ return new Promise((resolve, reject) => {
115
+ readableNode.on("data", (chunk) => chunks.push(Buffer.from(chunk)))
116
+ readableNode.on("error", (err) => reject(err))
117
+ readableNode.on("end", () =>
118
+ resolve(Buffer.concat(chunks).toString("utf8"))
119
+ )
120
+ })
121
+ }
122
+
123
+ async function streamReadableWebToString(
124
+ readableWeb: ReadableStream
125
+ ): Promise<string> {
126
+ const reader = readableWeb.getReader()
127
+ const { decode, getClosingChunk } = decodeChunks()
128
+ let str: string = ""
129
+ while (true) {
130
+ const { done, value } = await reader.read()
131
+ if (done) break
132
+ str += decode(value)
133
+ }
134
+ str += getClosingChunk()
135
+ return str
136
+ }
137
+ async function stringToStreamReadableNode(
138
+ str: string
139
+ ): Promise<StreamReadableNode> {
140
+ const { Readable } = await loadStreamNodeModule()
141
+ return Readable.from(str)
142
+ }
143
+ function stringToStreamReadableWeb(str: string): StreamReadableWeb {
144
+ // ReadableStream.from() spec discussion: https://github.com/whatwg/streams/issues/1018
145
+ assertReadableStreamConstructor()
146
+ const readableStream = new ReadableStream({
147
+ start(controller) {
148
+ controller.enqueue(encodeForWebStream(str))
149
+ controller.close()
150
+ },
151
+ })
152
+ return readableStream
153
+ }
154
+ function stringToStreamPipeNode(str: string): StreamPipeNode {
155
+ return (writable: StreamWritableNode) => {
156
+ writable.write(str)
157
+ writable.end()
158
+ }
159
+ }
160
+ function stringToStreamPipeWeb(str: string): StreamPipeWeb {
161
+ return (writable: StreamWritableWeb) => {
162
+ const writer = writable.getWriter()
163
+ writer.write(encodeForWebStream(str))
164
+ writer.close()
165
+ }
166
+ }
167
+
168
+ async function streamPipeNodeToString(
169
+ streamPipeNode: StreamPipeNode
170
+ ): Promise<string> {
171
+ let str: string = ""
172
+ let resolve: () => void
173
+ let reject: (err: unknown) => void
174
+ const promise = new Promise<string>((resolve_, reject_) => {
175
+ resolve = () => resolve_(str)
176
+ reject = reject_
177
+ })
178
+ const { Writable } = await loadStreamNodeModule()
179
+ const writable = new Writable({
180
+ write(chunk, _encoding, callback) {
181
+ const s = chunk.toString()
182
+ assert(typeof s === "string")
183
+ str += s
184
+ callback()
185
+ },
186
+ final(callback) {
187
+ resolve()
188
+ callback()
189
+ },
190
+ destroy(err) {
191
+ if (err) {
192
+ reject(err)
193
+ } else {
194
+ resolve()
195
+ }
196
+ },
197
+ })
198
+ streamPipeNode(writable)
199
+ return promise
200
+ }
201
+ function streamPipeWebToString(streamPipeWeb: StreamPipeWeb): Promise<string> {
202
+ const { decode, getClosingChunk } = decodeChunks()
203
+ let str: string = ""
204
+ let resolve: (s: string) => void
205
+ const promise = new Promise<string>((r) => (resolve = r))
206
+ const writable = new WritableStream({
207
+ write(chunk) {
208
+ str += decode(chunk)
209
+ },
210
+ close() {
211
+ str += getClosingChunk()
212
+ resolve(str)
213
+ },
214
+ })
215
+ streamPipeWeb(writable)
216
+ return promise
217
+ }
218
+
219
+ async function getStreamReadableNode(
220
+ htmlRender: HtmlRender
221
+ ): Promise<null | StreamReadableNode> {
222
+ if (typeof htmlRender === "string") {
223
+ return stringToStreamReadableNode(htmlRender)
224
+ }
225
+ if (isStreamReadableNode(htmlRender)) {
226
+ return htmlRender
227
+ }
228
+ return null
229
+ }
230
+ function getStreamReadableWeb(
231
+ htmlRender: HtmlRender
232
+ ): null | StreamReadableWeb {
233
+ if (typeof htmlRender === "string") {
234
+ return stringToStreamReadableWeb(htmlRender)
235
+ }
236
+ if (isStreamReadableWeb(htmlRender)) {
237
+ return htmlRender
238
+ }
239
+ return null
240
+ }
241
+
242
+ function pipeToStreamWritableWeb(
243
+ htmlRender: HtmlRender,
244
+ writable: StreamWritableWeb
245
+ ): boolean {
246
+ if (typeof htmlRender === "string") {
247
+ const streamPipeWeb = stringToStreamPipeWeb(htmlRender)
248
+ streamPipeWeb(writable)
249
+ return true
250
+ }
251
+ if (isStreamReadableWeb(htmlRender)) {
252
+ htmlRender.pipeTo(writable)
253
+ return true
254
+ }
255
+ if (isStreamPipeWeb(htmlRender)) {
256
+ const streamPipeWeb = getStreamPipeWeb(htmlRender)
257
+ assert(streamPipeWeb)
258
+ streamPipeWeb(writable)
259
+ return true
260
+ }
261
+ if (isStreamReadableNode(htmlRender) || isStreamPipeNode(htmlRender)) {
262
+ return false
263
+ }
264
+ // checkType<never>(htmlRender)
265
+ assert(false)
266
+ }
267
+ function pipeToStreamWritableNode(
268
+ htmlRender: HtmlRender,
269
+ writable: StreamWritableNode
270
+ ): boolean {
271
+ if (typeof htmlRender === "string") {
272
+ const streamPipeNode = stringToStreamPipeNode(htmlRender)
273
+ streamPipeNode(writable)
274
+ return true
275
+ }
276
+ if (isStreamReadableNode(htmlRender)) {
277
+ htmlRender.pipe(writable)
278
+ return true
279
+ }
280
+ if (isStreamPipeNode(htmlRender)) {
281
+ const streamPipeNode = getStreamPipeNode(htmlRender)
282
+ assert(streamPipeNode)
283
+ streamPipeNode(writable)
284
+ return true
285
+ }
286
+ if (isStreamReadableWeb(htmlRender) || isStreamPipeWeb(htmlRender)) {
287
+ return false
288
+ }
289
+ // checkType<never>(htmlRender)
290
+ assert(false)
291
+ }
292
+
293
+ async function processStream(
294
+ streamOriginal: StreamProviderAny,
295
+ {
296
+ injectStringAtBegin,
297
+ injectStringAfterFirstChunk,
298
+ injectStringAtEnd,
299
+ onErrorWhileStreaming,
300
+ enableEagerStreaming,
301
+ }: {
302
+ injectStringAtBegin?: () => Promise<string>
303
+ injectStringAfterFirstChunk?: () => string | null
304
+ injectStringAtEnd?: () => Promise<string>
305
+ onErrorWhileStreaming: (err: unknown) => void
306
+ enableEagerStreaming?: boolean
307
+ }
308
+ ): Promise<StreamProviderNormalized> {
309
+ const buffer: unknown[] = []
310
+ let streamOriginalHasStartedEmitting = false
311
+ let streamOriginalEnded = false
312
+ let streamClosed = false
313
+ let onEndWasCalled = false
314
+ let isReadyToWrite = false
315
+ let wrapperCreated = false
316
+ let shouldFlushStream = false
317
+ let resolve: (result: StreamProviderNormalized) => void
318
+ let reject: (err: unknown) => void
319
+ let promiseHasResolved = false
320
+ let injectStringAfterFirstChunk_done = false
321
+ const streamWrapperPromise = new Promise<StreamProviderNormalized>(
322
+ (resolve_, reject_) => {
323
+ resolve = (streamWrapper) => {
324
+ promiseHasResolved = true
325
+ resolve_(streamWrapper)
326
+ }
327
+ reject = (err) => {
328
+ promiseHasResolved = true
329
+ reject_(err)
330
+ }
331
+ }
332
+ )
333
+ let resolveReadyToWrite: () => void
334
+ const promiseReadyToWrite = new Promise<void>(
335
+ (r) => (resolveReadyToWrite = r)
336
+ )
337
+
338
+ if (injectStringAtBegin) {
339
+ const injectedChunk: string = await injectStringAtBegin()
340
+ writeStream(injectedChunk) // Adds injectedChunk to buffer
341
+ flushStream() // Sets shouldFlushStream to true
342
+ }
343
+
344
+ // We call onStreamEvent() also when the stream ends in order to properly handle the situation when the stream didn't emit any data
345
+ const onStreamDataOrEnd = (cb: () => void) => {
346
+ assert(streamOriginalEnded === false)
347
+ streamOriginalHasStartedEmitting = true
348
+ cb()
349
+ if (wrapperCreated) resolvePromise()
350
+ }
351
+
352
+ const { streamWrapper, streamWrapperOperations } = await createStreamWrapper({
353
+ streamOriginal,
354
+ onReadyToWrite() {
355
+ debug("stream begin")
356
+ isReadyToWrite = true
357
+ flushBuffer()
358
+ resolveReadyToWrite()
359
+ },
360
+ onError(err) {
361
+ if (!promiseHasResolved) {
362
+ reject(err)
363
+ } else {
364
+ onErrorWhileStreaming(err)
365
+ }
366
+ },
367
+ onData(chunk: unknown) {
368
+ onStreamDataOrEnd(() => {
369
+ writeStream(chunk)
370
+ if (injectStringAfterFirstChunk && !injectStringAfterFirstChunk_done) {
371
+ const injectedChunk = injectStringAfterFirstChunk()
372
+ if (injectedChunk !== null) writeStream(injectedChunk)
373
+ injectStringAfterFirstChunk_done = true
374
+ }
375
+ })
376
+ },
377
+ async onEnd(
378
+ // Should we use this `isCancel`? Maybe we can skip `injectStringAtEnd()`?
379
+ isCancel
380
+ ) {
381
+ try {
382
+ assert(!onEndWasCalled)
383
+ onEndWasCalled = true
384
+ debug("stream end")
385
+ // We call onStreamEvent() also here in case the stream didn't emit any data
386
+ onStreamDataOrEnd(() => {
387
+ streamOriginalEnded = true
388
+ })
389
+ if (injectStringAtEnd) {
390
+ const injectedChunk = await injectStringAtEnd()
391
+ writeStream(injectedChunk)
392
+ }
393
+ await promiseReadyToWrite // E.g. if the user calls the pipe wrapper after the original writable has ended
394
+ assert(isReady())
395
+ flushBuffer()
396
+ streamClosed = true
397
+ debug("stream ended")
398
+ } catch (err) {
399
+ // Ideally, we should catch and gracefully handle user land errors, as any error thrown here kills the server. (I assume that the fact it kills the server is a Node.js bug?)
400
+
401
+ // Show "[reveal][Bug] You stumbled upon a bug in Reveal's source code" to user while printing original error
402
+ if (!isBug(err)) {
403
+ console.error(err)
404
+ assert(false)
405
+ }
406
+
407
+ throw err
408
+ }
409
+ },
410
+ onFlush() {
411
+ flushStream()
412
+ },
413
+ })
414
+ wrapperCreated = true
415
+
416
+ flushBuffer() // In case onReadyToWrite() was already called (the flushBuffer() of onReadyToWrite() wasn't called because `wrapperCreated === false`)
417
+
418
+ if (!delayStreamStart()) resolvePromise()
419
+
420
+ return streamWrapperPromise
421
+
422
+ function writeStream(chunk: unknown) {
423
+ buffer.push(chunk)
424
+ flushBuffer()
425
+ }
426
+
427
+ function flushBuffer() {
428
+ if (!isReady()) return
429
+ assert(!streamClosed)
430
+ buffer.forEach((chunk) => {
431
+ streamWrapperOperations.writeChunk(chunk)
432
+ })
433
+ buffer.length = 0
434
+ if (shouldFlushStream) flushStream()
435
+ }
436
+
437
+ function resolvePromise() {
438
+ assert(!delayStreamStart()) // The stream promise shouldn't resolve before delayStreamStart()
439
+ assert(wrapperCreated) // Doesn't make sense to resolve streamWrapper if it isn't defined yet
440
+ debug("stream promise resolved")
441
+ resolve(streamWrapper)
442
+ }
443
+
444
+ function flushStream() {
445
+ if (!isReady()) {
446
+ shouldFlushStream = true
447
+ return
448
+ }
449
+ if (streamWrapperOperations.flushStream === null) return
450
+ streamWrapperOperations.flushStream()
451
+ shouldFlushStream = false
452
+ debug("stream flushed")
453
+ }
454
+
455
+ function isReady() {
456
+ /*
457
+ console.log('isReadyToWrite', isReadyToWrite)
458
+ console.log('wrapperCreated', wrapperCreated)
459
+ console.log('!delayStreamStart()', !delayStreamStart())
460
+ */
461
+ return (
462
+ isReadyToWrite &&
463
+ // We can't use streamWrapperOperations.writeChunk() if it isn't defined yet
464
+ wrapperCreated &&
465
+ // See comment below
466
+ !delayStreamStart()
467
+ )
468
+ }
469
+
470
+ // Delay streaming, so that if the page shell fails then Reveal is able to render the error page.
471
+ // - We can't erase the previously written stream data => we need to delay streaming if we want to be able to restart rendering anew for the error page
472
+ // - This is what React expects.
473
+ // - Does this make sense for UI frameworks other than React?
474
+ // - We don't need this anymore if we implement a client-side recover mechanism.
475
+ // - I.e. rendering the error page on the client-side if there is an error during the stream.
476
+ // - We cannot do this with Server Routing
477
+ // - Emitting the wrong status code doesn't matter with libraries like react-streaming which automatically disable streaming for bots. (Emitting the right status code only matters for bots.)
478
+ function delayStreamStart() {
479
+ return !enableEagerStreaming && !streamOriginalHasStartedEmitting
480
+ }
481
+ }
482
+
483
+ async function createStreamWrapper({
484
+ streamOriginal,
485
+ onError,
486
+ onData,
487
+ onEnd,
488
+ onFlush,
489
+ onReadyToWrite,
490
+ }: {
491
+ streamOriginal: StreamProviderAny
492
+ onError: (err: unknown) => void
493
+ onData: (chunk: unknown) => void
494
+ onEnd: (isCancel?: boolean) => Promise<void>
495
+ onFlush: () => void
496
+ onReadyToWrite: () => void
497
+ }): Promise<{
498
+ streamWrapper: StreamProviderNormalized
499
+ streamWrapperOperations: {
500
+ writeChunk: (chunk: unknown) => void
501
+ flushStream: null | (() => void)
502
+ }
503
+ }> {
504
+ // Normalize react-streaming package streams
505
+ let streamToProcess: StreamProviderAny = streamOriginal
506
+ if (isStreamFromReactStreamingPackage(streamOriginal)) {
507
+ debug(`onRenderHtml() hook returned ${pc.cyan("react-streaming")} result`)
508
+ streamToProcess = getStreamOfReactStreamingPackage(streamOriginal) as StreamProviderAny
509
+ }
510
+
511
+ if (isStreamPipeNode(streamToProcess)) {
512
+ debug("onRenderHtml() hook returned Node.js Stream Pipe")
513
+
514
+ let writableOriginal: null | (StreamWritableNode & { flush?: () => void }) =
515
+ null
516
+ const pipeProxy: StreamPipeNode = (writable_: StreamWritableNode) => {
517
+ writableOriginal = writable_
518
+ debug("original Node.js Writable received")
519
+ onReadyToWrite()
520
+ if (hasEnded) {
521
+ // onReadyToWrite() already wrote everything; we can close the stream right away
522
+ writableOriginal.end()
523
+ }
524
+ }
525
+ stampPipe(pipeProxy, "node-stream")
526
+ const writeChunk = (chunk: unknown) => {
527
+ assert(writableOriginal)
528
+ writableOriginal.write(chunk)
529
+ debugWithChunk("data written (Node.js Writable)", chunk)
530
+ }
531
+ // For libraries such as https://www.npmjs.com/package/compression
532
+ // - React calls writable.flush() when available
533
+ // - https://github.com/revealjs/reveal/issues/466#issuecomment-1269601710
534
+ const flushStream = () => {
535
+ assert(writableOriginal)
536
+ if (typeof writableOriginal.flush === "function") {
537
+ writableOriginal.flush()
538
+ debug("stream flush() performed (Node.js Writable)")
539
+ }
540
+ }
541
+
542
+ let hasEnded = false
543
+ const endStream = () => {
544
+ hasEnded = true
545
+ if (writableOriginal) {
546
+ writableOriginal.end()
547
+ }
548
+ }
549
+
550
+ const { Writable } = await loadStreamNodeModule()
551
+ const writableProxy = new Writable({
552
+ async write(chunk, _encoding, callback) {
553
+ onData(chunk)
554
+ callback()
555
+ },
556
+ async destroy(err, callback) {
557
+ if (err) {
558
+ onError(err)
559
+ } else {
560
+ await onEnd()
561
+ }
562
+ callback(err)
563
+ endStream()
564
+ },
565
+ })
566
+
567
+ // Forward the flush() call
568
+ objectAssign(writableProxy, {
569
+ flush: () => {
570
+ onFlush()
571
+ },
572
+ })
573
+ assert(typeof writableProxy.flush === "function")
574
+
575
+ const pipeOriginal = getStreamPipeNode(streamToProcess)
576
+ assert(pipeOriginal)
577
+ pipeOriginal(writableProxy)
578
+
579
+ return {
580
+ streamWrapper: pipeProxy,
581
+ streamWrapperOperations: { writeChunk, flushStream },
582
+ }
583
+ }
584
+
585
+ if (isStreamPipeWeb(streamToProcess)) {
586
+ debug("onRenderHtml() hook returned Web Stream Pipe")
587
+
588
+ let writerOriginal: null | WritableStreamDefaultWriter<unknown> = null
589
+ const pipeProxy: StreamPipeWeb = (writableOriginal: StreamWritableWeb) => {
590
+ writerOriginal = writableOriginal.getWriter()
591
+ debug("original Web Writable received")
592
+ ;(async () => {
593
+ // CloudFlare Workers does not implement `ready` property
594
+ // - https://github.com/vuejs/vue-next/issues/4287
595
+ try {
596
+ await writerOriginal.ready
597
+ } catch (e: unknown) {
598
+ // Ignore stream errors during ready check
599
+ }
600
+ onReadyToWrite()
601
+ if (hasEnded) {
602
+ // onReadyToWrite() already wrote everything; we can close the stream right away
603
+ writerOriginal.close()
604
+ }
605
+ })()
606
+ }
607
+ stampPipe(pipeProxy, "web-stream")
608
+ const writeChunk = (chunk: unknown) => {
609
+ assert(writerOriginal)
610
+ writerOriginal.write(encodeForWebStream(chunk))
611
+ debugWithChunk("data written (Web Writable)", chunk)
612
+ }
613
+ // Web Streams have compression built-in
614
+ // - https://developer.mozilla.org/en-US/docs/Web/API/Compression_Streams_API
615
+ // - It seems that there is no flush interface? Flushing just works automagically?
616
+ const flushStream = null
617
+
618
+ let hasEnded = false
619
+ const endStream = () => {
620
+ hasEnded = true
621
+ if (writerOriginal) {
622
+ writerOriginal.close()
623
+ }
624
+ }
625
+
626
+ let writableProxy: WritableStream<unknown>
627
+ if (typeof ReadableStream !== "function") {
628
+ writableProxy = new WritableStream({
629
+ write(chunk) {
630
+ onData(chunk)
631
+ },
632
+ async close() {
633
+ await onEnd()
634
+ endStream()
635
+ },
636
+ abort(err) {
637
+ onError(err)
638
+ endStream()
639
+ },
640
+ })
641
+ } else {
642
+ const { readable, writable } = new TransformStream()
643
+ writableProxy = writable
644
+ handleReadableWeb(readable, {
645
+ onData,
646
+ onError(err) {
647
+ onError(err)
648
+ endStream()
649
+ },
650
+ async onEnd() {
651
+ await onEnd()
652
+ endStream()
653
+ },
654
+ })
655
+ }
656
+
657
+ const pipeOriginal = getStreamPipeWeb(streamToProcess)
658
+ assert(pipeOriginal)
659
+ pipeOriginal(writableProxy)
660
+
661
+ return {
662
+ streamWrapper: pipeProxy,
663
+ streamWrapperOperations: { writeChunk, flushStream },
664
+ }
665
+ }
666
+
667
+ if (isStreamReadableWeb(streamToProcess)) {
668
+ debug("onRenderHtml() hook returned Web Readable")
669
+
670
+ const readableOriginal: StreamReadableWeb = streamToProcess as StreamReadableWeb
671
+
672
+ let controllerProxyIsClosed = false
673
+ let isClosed = false
674
+ let isCancel = false
675
+ const closeStream = async () => {
676
+ if (isClosed) return
677
+ isClosed = true
678
+ await onEnd(isCancel)
679
+ controllerProxy.close()
680
+ controllerProxyIsClosed = true
681
+ }
682
+ let controllerProxy: ReadableStreamController<unknown>
683
+ assertReadableStreamConstructor()
684
+ const readableProxy = new ReadableStream<unknown>({
685
+ start(controller) {
686
+ controllerProxy = controller
687
+ onReadyToWrite()
688
+ handleReadableWeb(readableOriginal, {
689
+ onData,
690
+ onError(err) {
691
+ onError(err)
692
+ controllerProxy.close()
693
+ },
694
+ async onEnd() {
695
+ await closeStream()
696
+ },
697
+ })
698
+ },
699
+ async cancel(...args) {
700
+ isCancel = true
701
+ await readableOriginal.cancel(...args)
702
+ // If readableOriginal has implemented readableOriginal.cancel() then the onEnd() callback and therfore closeStream() may already have been called at this point
703
+ await closeStream()
704
+ },
705
+ })
706
+
707
+ const writeChunk = (chunk: unknown) => {
708
+ if (
709
+ // If readableOriginal doesn't implement readableOriginal.cancel() then it may still emit data after we close the stream. We therefore need to check whether we closed `controllerProxy`.
710
+ !controllerProxyIsClosed
711
+ ) {
712
+ controllerProxy.enqueue(encodeForWebStream(chunk) as any)
713
+ debugWithChunk("data written (Web Readable)", chunk)
714
+ } else {
715
+ debugWithChunk("data emitted but not written (Web Readable)", chunk)
716
+ }
717
+ }
718
+ // Readables don't have the notion of flushing
719
+ const flushStream = null
720
+
721
+ return {
722
+ streamWrapper: readableProxy as StreamProviderNormalized,
723
+ streamWrapperOperations: { writeChunk, flushStream },
724
+ }
725
+ }
726
+
727
+ if (isStreamReadableNode(streamToProcess)) {
728
+ debug("onRenderHtml() hook returned Node.js Readable")
729
+
730
+ const readableOriginal: StreamReadableNode = streamToProcess as StreamReadableNode
731
+
732
+ const { Readable } = await loadStreamNodeModule()
733
+ // Vue doesn't always set the read() handler: https://github.com/revealjs/reveal/issues/138#issuecomment-934743375
734
+ if (readableOriginal._read === Readable.prototype._read) {
735
+ readableOriginal._read = function () {}
736
+ }
737
+
738
+ const writeChunk = (chunk: unknown) => {
739
+ readableProxy.push(chunk)
740
+ debugWithChunk("data written (Node.js Readable)", chunk)
741
+ }
742
+ // Readables don't have the notion of flushing
743
+ const flushStream = null
744
+ const closeProxy = () => {
745
+ readableProxy.push(null)
746
+ }
747
+ const readableProxy: StreamReadableNode = new Readable({ read() {} })
748
+
749
+ onReadyToWrite()
750
+
751
+ readableOriginal.on("data", (chunk) => {
752
+ onData(chunk)
753
+ })
754
+ readableOriginal.on("error", (err) => {
755
+ onError(err)
756
+ closeProxy()
757
+ })
758
+ readableOriginal.on("end", async () => {
759
+ await onEnd()
760
+ closeProxy()
761
+ })
762
+
763
+ return {
764
+ streamWrapper: readableProxy as StreamProviderNormalized,
765
+ streamWrapperOperations: { writeChunk, flushStream },
766
+ }
767
+ }
768
+
769
+ assert(false)
770
+ }
771
+
772
+ async function handleReadableWeb(
773
+ readable: ReadableStream,
774
+ {
775
+ onData,
776
+ onError,
777
+ onEnd,
778
+ }: {
779
+ onData: (chunk: unknown) => void
780
+ onError: (err: unknown) => void
781
+ onEnd: () => Promise<void>
782
+ }
783
+ ) {
784
+ const reader = readable.getReader()
785
+ while (true) {
786
+ let result: ReadableStreamReadResult<unknown>
787
+ try {
788
+ result = await reader.read()
789
+ } catch (err) {
790
+ onError(err)
791
+ return
792
+ }
793
+ const { value, done } = result
794
+ if (done) {
795
+ break
796
+ }
797
+ onData(value)
798
+ }
799
+ await onEnd()
800
+ }
801
+
802
+ function isStream(something: unknown): something is StreamProviderAny {
803
+ if (
804
+ isStreamReadableWeb(something) ||
805
+ isStreamReadableNode(something) ||
806
+ isStreamPipeNode(something) ||
807
+ isStreamPipeWeb(something) ||
808
+ isStreamFromReactStreamingPackage(something)
809
+ ) {
810
+ checkType<StreamProviderAny>(something)
811
+ return true
812
+ }
813
+ return false
814
+ }
815
+
816
+ function getStreamPipeWeb(thing: unknown): null | StreamPipeWeb {
817
+ if (!isStreamPipeWeb(thing)) {
818
+ return null
819
+ }
820
+ assert(isCallable(thing) && "isWebStreamPipe" in thing)
821
+ return thing
822
+ }
823
+ function isStreamPipeWeb(thing: unknown): thing is StreamPipeWeb {
824
+ if (isCallable(thing) && "isWebStreamPipe" in thing) {
825
+ return true
826
+ }
827
+ return false
828
+ }
829
+
830
+ function getStreamPipeNode(thing: unknown): null | StreamPipeNode {
831
+ if (!isStreamPipeNode(thing)) {
832
+ return null
833
+ }
834
+ assert(isCallable(thing) && "isNodeStreamPipe" in thing)
835
+ return thing
836
+ }
837
+ function isStreamPipeNode(thing: unknown): thing is StreamPipeNode {
838
+ if (isCallable(thing) && "isNodeStreamPipe" in thing) {
839
+ return true
840
+ }
841
+ return false
842
+ }
843
+
844
+ function stampPipe(
845
+ pipe: StreamPipeNode | StreamPipeWeb,
846
+ pipeType: "web-stream" | "node-stream"
847
+ ) {
848
+ assertUsage(
849
+ pipeType,
850
+ `stampPipe(pipe, pipeType): argument ${pc.cyan("pipeType")} is missing.)`,
851
+ {
852
+ showStackTrace: true,
853
+ }
854
+ )
855
+ assertUsage(
856
+ ["web-stream", "node-stream"].includes(pipeType),
857
+ `stampPipe(pipe, pipeType): argument ${pc.cyan("pipeType")} should be either ${pc.cyan(
858
+ "'web-stream'"
859
+ )} or ${pc.cyan("'node-stream'")}.`,
860
+ { showStackTrace: true }
861
+ )
862
+ if (pipeType === "node-stream") {
863
+ Object.assign(pipe, { isNodeStreamPipe: true })
864
+ } else {
865
+ Object.assign(pipe, { isWebStreamPipe: true })
866
+ }
867
+ }
868
+
869
+ type StreamPipe = (writable: StreamWritableNode | StreamWritableWeb) => void
870
+ const __streamPipe = "__streamPipe"
871
+ type StreamPipeWrapped = { [__streamPipe]: StreamPipe }
872
+ function pipeStream(pipe: StreamPipe): StreamPipeWrapped {
873
+ return { [__streamPipe]: pipe }
874
+ }
875
+
876
+ async function streamToString(stream: StreamProviderAny): Promise<string> {
877
+ if (isStreamReadableWeb(stream)) {
878
+ return await streamReadableWebToString(stream)
879
+ }
880
+ if (isStreamReadableNode(stream)) {
881
+ return await streamReadableNodeToString(stream)
882
+ }
883
+ if (isStreamPipeNode(stream)) {
884
+ const pipeNode = getStreamPipeNode(stream)
885
+ assert(pipeNode)
886
+ return await streamPipeNodeToString(pipeNode)
887
+ }
888
+ if (isStreamPipeWeb(stream)) {
889
+ const pipeWeb = getStreamPipeWeb(stream)
890
+ assert(pipeWeb)
891
+ return await streamPipeWebToString(pipeWeb)
892
+ }
893
+ if (isStreamFromReactStreamingPackage(stream)) {
894
+ const result = await streamFromReactStreamingPackageToString(stream)
895
+ if (result === undefined) {
896
+ throw new Error(
897
+ "streamFromReactStreamingPackageToString returned undefined"
898
+ )
899
+ }
900
+ return result
901
+ }
902
+ assert(false)
903
+ }
904
+
905
+ function assertReadableStreamConstructor() {
906
+ assertUsage(
907
+ typeof ReadableStream === "function",
908
+ // Error message copied from vue's renderToWebStream() implementation
909
+ "ReadableStream constructor isn't available in the global scope. " +
910
+ "If the target environment does support web streams, consider using " +
911
+ "pipeToWebWritable() with an existing WritableStream instance instead."
912
+ )
913
+ }
914
+
915
+ let encoder: TextEncoder
916
+ function encodeForWebStream(thing: unknown) {
917
+ if (!encoder) {
918
+ encoder = new TextEncoder()
919
+ }
920
+ if (typeof thing === "string") {
921
+ return encoder.encode(thing)
922
+ }
923
+ return thing
924
+ }
925
+
926
+ // Because of Cloudflare Workers, we cannot statically import the `stream` module, instead we dynamically import it.
927
+ async function loadStreamNodeModule(): Promise<{
928
+ Readable: typeof Readable_
929
+ Writable: typeof Writable_
930
+ }> {
931
+ const streamModule = (await import_("stream")).default as Awaited<
932
+ typeof import("stream")
933
+ >
934
+ const { Readable, Writable } = streamModule
935
+ return { Readable, Writable }
936
+ }
937
+
938
+ function getStreamName(
939
+ kind: "pipe" | "readable" | "writable",
940
+ type: "web" | "node"
941
+ ): `a ${string} Stream` | `a ${string} Stream Pipe` {
942
+ let typeName = capitalizeFirstLetter(type)
943
+ if (typeName === "Node") {
944
+ typeName = "Node.js"
945
+ }
946
+ const kindName = capitalizeFirstLetter(kind)
947
+ if (kind !== "pipe") {
948
+ return `a ${kindName} ${typeName} Stream`
949
+ }
950
+ if (kind === "pipe") {
951
+ return `a ${typeName} Stream Pipe`
952
+ }
953
+ assert(false)
954
+ }
955
+
956
+ function inferStreamName(stream: StreamProviderNormalized) {
957
+ if (isStreamReadableWeb(stream)) {
958
+ return getStreamName("readable", "web")
959
+ }
960
+ if (isStreamReadableNode(stream)) {
961
+ return getStreamName("readable", "node")
962
+ }
963
+ if (isStreamPipeNode(stream)) {
964
+ return getStreamName("pipe", "node")
965
+ }
966
+ if (isStreamPipeWeb(stream)) {
967
+ return getStreamName("pipe", "web")
968
+ }
969
+ assert(false)
970
+ }
971
+
972
+ function decodeChunks() {
973
+ const decoder = new TextDecoder()
974
+ const decode = (chunk: unknown): string => {
975
+ if (typeof chunk === "string") {
976
+ return chunk
977
+ } else if (chunk instanceof Uint8Array) {
978
+ return decoder.decode(chunk, { stream: true })
979
+ } else {
980
+ assert(false)
981
+ }
982
+ }
983
+ // https://github.com/revealjs/reveal/pull/1799#discussion_r1713554096
984
+ const getClosingChunk = (): string => {
985
+ return decoder.decode()
986
+ }
987
+ return { decode, getClosingChunk }
988
+ }
989
+
990
+ function debugWithChunk(msg: string, chunk: unknown): void {
991
+ if (!debug.isActivated) return
992
+
993
+ let chunkStr: string
994
+ try {
995
+ chunkStr = new TextDecoder().decode(chunk as any)
996
+ } catch (err) {
997
+ chunkStr = String(chunk)
998
+ }
999
+
1000
+ debug(msg, chunkStr)
1001
+ }