@absolutejs/absolute 0.19.0-beta.999 → 0.20.0-beta.1
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.
- package/LICENSE +21 -13
- package/README.md +48 -2
- package/dist/angular/browser.js +82 -77
- package/dist/angular/browser.js.map +11 -11
- package/dist/angular/components/constants.js +43 -0
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/angular/hmrPreserveCore.ts +132 -134
- package/dist/angular/index.js +1719 -844
- package/dist/angular/index.js.map +34 -26
- package/dist/angular/server.js +1620 -768
- package/dist/angular/server.js.map +28 -20
- package/dist/build.js +4935 -2593
- package/dist/build.js.map +72 -57
- package/dist/cli/config/client.js +578 -0
- package/dist/cli/config/server.js +39587 -0
- package/dist/cli/htmx/htmx.min.js +1 -0
- package/dist/cli/index.js +16828 -3511
- package/dist/client/index.js +49 -46
- package/dist/client/index.js.map +12 -12
- package/dist/core/streamingSlotRegistrar.js +1 -19
- package/dist/core/streamingSlotRegistrar.js.map +2 -2
- package/dist/core/streamingSlotRegistry.js +1 -19
- package/dist/core/streamingSlotRegistry.js.map +2 -2
- package/dist/dev/client/cssUtils.ts +98 -41
- package/dist/dev/client/domState.ts +2 -0
- package/dist/dev/client/errorOverlay.ts +14 -13
- package/dist/dev/client/handlers/angularHmrShim.ts +20 -20
- package/dist/dev/client/handlers/angularRemount.ts +74 -55
- package/dist/dev/client/handlers/angularRemountWiring.ts +1 -2
- package/dist/dev/client/handlers/html.ts +144 -41
- package/dist/dev/client/handlers/htmx.ts +43 -8
- package/dist/dev/client/handlers/react.ts +114 -32
- package/dist/dev/client/handlers/rebuild.ts +28 -8
- package/dist/dev/client/handlers/svelte.ts +92 -51
- package/dist/dev/client/handlers/vue.ts +36 -45
- package/dist/dev/client/hmrClient.ts +101 -26
- package/dist/dev/client/hmrTiming.ts +141 -0
- package/dist/dev/client/hmrToast.ts +22 -24
- package/dist/dev/client/reactRefreshSetup.ts +4 -0
- package/dist/dev/client/vendor/reactRefreshRuntime.d.ts +12 -0
- package/dist/dev/client/vendor/reactRefreshRuntime.js +313 -0
- package/dist/dev/serverBootstrap.js +45 -0
- package/dist/index.js +7153 -3224
- package/dist/index.js.map +118 -86
- package/dist/islands/browser.js +1 -19
- package/dist/islands/browser.js.map +3 -3
- package/dist/islands/index.js +709 -120
- package/dist/islands/index.js.map +18 -13
- package/dist/mobile/browser.js +428 -0
- package/dist/mobile/browser.js.map +12 -0
- package/dist/mobile/index.js +3058 -0
- package/dist/mobile/index.js.map +35 -0
- package/dist/react/browser.js +13 -62
- package/dist/react/browser.js.map +5 -6
- package/dist/react/components/browser/index.js +23 -13
- package/dist/react/components/index.js +30 -34
- package/dist/react/components/index.js.map +8 -7
- package/dist/react/hooks/index.js +1 -19
- package/dist/react/hooks/index.js.map +3 -3
- package/dist/react/index.js +1643 -679
- package/dist/react/index.js.map +29 -20
- package/dist/react/jsxDevRuntimeCompat.js +22 -20
- package/dist/react/jsxDevRuntimeCompat.js.map +5 -4
- package/dist/react/jsxRuntimeCompat.js +90 -0
- package/dist/react/jsxRuntimeCompat.js.map +10 -0
- package/dist/react/router/browser.js +77 -0
- package/dist/react/router/browser.js.map +10 -0
- package/dist/react/router/index.js +77 -0
- package/dist/react/router/index.js.map +10 -0
- package/dist/react/server.js +950 -565
- package/dist/react/server.js.map +16 -11
- package/dist/src/angular/components/constants.d.ts +21 -0
- package/dist/src/angular/hmrPreserveCore.d.ts +7 -20
- package/dist/src/angular/islands.d.ts +1 -1
- package/dist/src/angular/pageHandler.d.ts +2 -0
- package/dist/src/angular/ssrRender.d.ts +4 -1
- package/dist/src/build/bunStringRawUnicodePlugin.d.ts +12 -0
- package/dist/src/build/chainInlineSourcemaps.d.ts +1 -0
- package/dist/src/build/compileAngular.d.ts +5 -7
- package/dist/src/build/compileSvelte.d.ts +3 -0
- package/dist/src/build/compileVue.d.ts +3 -1
- package/dist/src/build/generateReactIndexes.d.ts +1 -0
- package/dist/src/build/islandRegistryTransform.d.ts +17 -0
- package/dist/src/build/maskLiterals.d.ts +28 -0
- package/dist/src/build/parseVueSpaRoutes.d.ts +5 -0
- package/dist/src/build/resolveBuildMode.d.ts +7 -0
- package/dist/src/build/serverExternals.d.ts +14 -0
- package/dist/src/build/spaSideManifests.d.ts +16 -0
- package/dist/src/build/tailwindCompiler.d.ts +0 -1
- package/dist/src/cli/add/dependencies.d.ts +13 -0
- package/dist/src/cli/config/absolute/AbsoluteConfigPanel.d.ts +6 -0
- package/dist/src/cli/config/absolute/editAbsoluteConfig.d.ts +5 -0
- package/dist/src/cli/config/absolute/resolveAbsoluteConfig.d.ts +19 -0
- package/dist/src/cli/config/auth/AuthPanel.d.ts +6 -0
- package/dist/src/cli/config/auth/authCatalog.d.ts +10 -0
- package/dist/src/cli/config/auth/authScaffolds.d.ts +16 -0
- package/dist/src/cli/config/auth/editAuthConfig.d.ts +5 -0
- package/dist/src/cli/config/auth/resolveAuthSettings.d.ts +14 -0
- package/dist/src/cli/config/auth/resolveAuthState.d.ts +2 -0
- package/dist/src/cli/config/auth/scaffoldAuthFeature.d.ts +6 -0
- package/dist/src/cli/config/client.d.ts +1 -0
- package/dist/src/cli/config/configCert.d.ts +12 -0
- package/dist/src/cli/config/eslint/EslintPanel.d.ts +6 -0
- package/dist/src/cli/config/eslint/configAst.d.ts +18 -0
- package/dist/src/cli/config/eslint/editConfigRule.d.ts +6 -0
- package/dist/src/cli/config/eslint/eslintStyles.d.ts +1 -0
- package/dist/src/cli/config/eslint/resolveConfig.d.ts +3 -0
- package/dist/src/cli/config/eslint/serializeValue.d.ts +9 -0
- package/dist/src/cli/config/guards.d.ts +4 -0
- package/dist/src/cli/config/integrations/IntegrationsPanel.d.ts +6 -0
- package/dist/src/cli/config/packageJson/PackageJsonPanel.d.ts +6 -0
- package/dist/src/cli/config/packageJson/editPackageJson.d.ts +9 -0
- package/dist/src/cli/config/packageJson/resolvePackageJson.d.ts +8 -0
- package/dist/src/cli/config/page/ConfigShell.d.ts +6 -0
- package/dist/src/cli/config/page/FieldEditor.d.ts +9 -0
- package/dist/src/cli/config/page/PanelHost.d.ts +6 -0
- package/dist/src/cli/config/page/configStyles.d.ts +1 -0
- package/dist/src/cli/config/panels.d.ts +7 -0
- package/dist/src/cli/config/prettier/PrettierPanel.d.ts +6 -0
- package/dist/src/cli/config/prettier/editPrettier.d.ts +5 -0
- package/dist/src/cli/config/prettier/resolvePrettier.d.ts +11 -0
- package/dist/src/cli/config/schema/fromJsonSchema.d.ts +3 -0
- package/dist/src/cli/config/schema/fromType.d.ts +1 -0
- package/dist/src/cli/config/schema/serialize.d.ts +1 -0
- package/dist/src/cli/config/server.d.ts +527 -0
- package/dist/src/cli/config/tsconfig/TsconfigPanel.d.ts +6 -0
- package/dist/src/cli/config/tsconfig/editTsconfig.d.ts +5 -0
- package/dist/src/cli/config/tsconfig/resolveTsconfig.d.ts +8 -0
- package/dist/src/cli/config/tsconfig/tsconfigStyles.d.ts +1 -0
- package/dist/src/cli/discoverInstances.d.ts +5 -0
- package/dist/src/cli/elysiaOpenApiTypeboxPlugin.d.ts +8 -0
- package/dist/src/cli/generate/componentTemplates.d.ts +7 -0
- package/dist/src/cli/generate/context.d.ts +30 -0
- package/dist/src/cli/generate/cssStrategy.d.ts +20 -0
- package/dist/src/cli/generate/frameworkKey.d.ts +3 -0
- package/dist/src/cli/generate/frameworks.d.ts +40 -0
- package/dist/src/cli/generate/generateApi.d.ts +3 -0
- package/dist/src/cli/generate/generateComponent.d.ts +4 -0
- package/dist/src/cli/generate/generatePage.d.ts +4 -0
- package/dist/src/cli/generate/naming.d.ts +5 -0
- package/dist/src/cli/generate/navData.d.ts +10 -0
- package/dist/src/cli/generate/outcome.d.ts +17 -0
- package/dist/src/cli/generate/pageTemplates.d.ts +11 -0
- package/dist/src/cli/generate/routeWiring.d.ts +40 -0
- package/dist/src/cli/generate/staticNav.d.ts +5 -0
- package/dist/src/cli/heapDiff.d.ts +1 -0
- package/dist/src/cli/htmx/install.d.ts +6 -0
- package/dist/src/cli/inspectData.d.ts +12 -0
- package/dist/src/cli/inspectTui.d.ts +1 -0
- package/dist/src/cli/instanceStatus.d.ts +22 -0
- package/dist/src/cli/integrations/addPlugin.d.ts +8 -0
- package/dist/src/cli/integrations/catalog.d.ts +20 -0
- package/dist/src/cli/psTui.d.ts +1 -0
- package/dist/src/cli/scripts/add.d.ts +1 -0
- package/dist/src/cli/scripts/analyze.d.ts +1 -0
- package/dist/src/cli/scripts/api.d.ts +1 -0
- package/dist/src/cli/scripts/build.d.ts +1 -1
- package/dist/src/cli/scripts/db.d.ts +20 -0
- package/dist/src/cli/scripts/dev.d.ts +5 -1
- package/dist/src/cli/scripts/doctor.d.ts +1 -0
- package/dist/src/cli/scripts/env.d.ts +7 -0
- package/dist/src/cli/scripts/eslint.d.ts +37 -2
- package/dist/src/cli/scripts/eslintChunked.d.ts +37 -0
- package/dist/src/cli/scripts/generate.d.ts +1 -0
- package/dist/src/cli/scripts/htmx.d.ts +1 -0
- package/dist/src/cli/scripts/inspect.d.ts +1 -0
- package/dist/src/cli/scripts/islands.d.ts +1 -0
- package/dist/src/cli/scripts/lintProof.d.ts +42 -0
- package/dist/src/cli/scripts/logs.d.ts +1 -0
- package/dist/src/cli/scripts/ls.d.ts +1 -0
- package/dist/src/cli/scripts/mem.d.ts +1 -0
- package/dist/src/cli/scripts/mobile.d.ts +1 -0
- package/dist/src/cli/scripts/prettier.d.ts +2 -0
- package/dist/src/cli/scripts/ps.d.ts +1 -0
- package/dist/src/cli/scripts/remove.d.ts +1 -0
- package/dist/src/cli/scripts/routes.d.ts +1 -0
- package/dist/src/cli/scripts/start.d.ts +6 -1
- package/dist/src/cli/scripts/tunnelRelay.d.ts +9 -0
- package/dist/src/cli/scripts/workspace.d.ts +3 -1
- package/dist/src/cli/serverBundleExternals.d.ts +2 -0
- package/dist/src/cli/tuiPrimitives.d.ts +14 -0
- package/dist/src/cli/typeGraphCoherence.d.ts +32 -0
- package/dist/src/cli/utils.d.ts +3 -1
- package/dist/src/cli/workspaceTui.d.ts +2 -1
- package/dist/src/client/hydrators/react.d.ts +1 -1
- package/dist/src/client/hydrators/svelte.d.ts +1 -1
- package/dist/src/client/hydrators/vue.d.ts +1 -1
- package/dist/src/client/islandStore.d.ts +3 -3
- package/dist/src/client/preserveIslandMarkup.d.ts +4 -1
- package/dist/src/constants.d.ts +21 -0
- package/dist/src/core/angularServerModule.d.ts +1 -0
- package/dist/src/core/build.d.ts +11 -3
- package/dist/src/core/devRouteRegistrationCallsite.d.ts +1 -5
- package/dist/src/core/index.d.ts +1 -0
- package/dist/src/core/pageResponseCache.d.ts +23 -0
- package/dist/src/core/prepare.d.ts +192 -154
- package/dist/src/core/requestContext.d.ts +18 -0
- package/dist/src/dev/angular/fastHmrCompiler.d.ts +5 -3
- package/dist/src/dev/angular/hmrCompiler.d.ts +1 -1
- package/dist/src/dev/angular/resolveOwningComponents.d.ts +1 -1
- package/dist/src/dev/clientManager.d.ts +10 -1
- package/dist/src/dev/configResolver.d.ts +2 -0
- package/dist/src/dev/moduleMapper.d.ts +1 -1
- package/dist/src/dev/moduleServer.d.ts +2 -1
- package/dist/src/dev/pathUtils.d.ts +1 -1
- package/dist/src/dev/reactComponentClassifier.d.ts +1 -1
- package/dist/src/dev/rebuildTrigger.d.ts +4 -0
- package/dist/src/dev/requestInspector.d.ts +31 -0
- package/dist/src/dev/serverBootstrap.d.ts +1 -0
- package/dist/src/dev/serverEntryWatcher.d.ts +3 -3
- package/dist/src/dev/tunnel/client.d.ts +20 -0
- package/dist/src/dev/tunnel/protocol.d.ts +85 -0
- package/dist/src/dev/tunnel/relay.d.ts +28 -0
- package/dist/src/dev/webSocket.d.ts +1 -1
- package/dist/src/mobile/androidConformance.d.ts +42 -0
- package/dist/src/mobile/androidEmulatorController.d.ts +99 -0
- package/dist/src/mobile/androidNativeWatcher.d.ts +19 -0
- package/dist/src/mobile/androidRelease.d.ts +47 -0
- package/dist/src/mobile/androidWebView.d.ts +46 -0
- package/dist/src/mobile/artifactStore.d.ts +47 -0
- package/dist/src/mobile/associationFiles.d.ts +49 -0
- package/dist/src/mobile/browser.d.ts +2 -0
- package/dist/src/mobile/buildMetadata.d.ts +10 -0
- package/dist/src/mobile/buildPipeline.d.ts +8 -0
- package/dist/src/mobile/buildRelease.d.ts +24 -0
- package/dist/src/mobile/capacitorBundle.d.ts +28 -0
- package/dist/src/mobile/capacitorProject.d.ts +9 -0
- package/dist/src/mobile/client.d.ts +35 -0
- package/dist/src/mobile/compatibilityDispatcher.d.ts +26 -0
- package/dist/src/mobile/config.d.ts +16 -0
- package/dist/src/mobile/emulatorDoctor.d.ts +25 -0
- package/dist/src/mobile/emulatorInstaller.d.ts +41 -0
- package/dist/src/mobile/index.d.ts +19 -0
- package/dist/src/mobile/materializedBundle.d.ts +36 -0
- package/dist/src/mobile/nativeDeepLinks.d.ts +5 -0
- package/dist/src/mobile/pageProtocol.d.ts +89 -0
- package/dist/src/mobile/producerContext.d.ts +4 -0
- package/dist/src/mobile/producerContextState.d.ts +10 -0
- package/dist/src/mobile/releaseArtifact.d.ts +75 -0
- package/dist/src/mobile/releaseDoctor.d.ts +13 -0
- package/dist/src/mobile/routeMatcher.d.ts +3 -0
- package/dist/src/mobile/routeMetadataTransform.d.ts +13 -0
- package/dist/src/mobile/shellBootstrap.d.ts +1 -0
- package/dist/src/mobile/transport.d.ts +31 -0
- package/dist/src/plugins/devtoolsJson.d.ts +6 -47
- package/dist/src/plugins/hmr.d.ts +22 -96
- package/dist/src/plugins/imageOptimizer.d.ts +150 -62
- package/dist/src/plugins/networking.d.ts +2 -2
- package/dist/src/plugins/openApiPlugin.d.ts +4 -0
- package/dist/src/plugins/telemetryPlugin.d.ts +36 -0
- package/dist/src/react/browser.d.ts +0 -2
- package/dist/src/react/hooks/useMediaQuery.d.ts +1 -1
- package/dist/src/react/index.d.ts +0 -2
- package/dist/src/react/jsxDevRuntimeCompat.d.ts +1 -1
- package/dist/src/react/jsxRuntimeCompat.d.ts +7 -0
- package/dist/src/react/pageHandler.d.ts +8 -0
- package/dist/src/react/router/UniversalRouter.d.ts +43 -0
- package/dist/src/react/router/browser.d.ts +2 -0
- package/dist/src/react/router/index.d.ts +2 -0
- package/dist/src/svelte/pageHandler.d.ts +5 -0
- package/dist/src/svelte/router/hashMode.d.ts +1 -6
- package/dist/src/svelte/router/matchPath.d.ts +4 -24
- package/dist/src/svelte/router/page.svelte.d.ts +1 -10
- package/dist/src/svelte/router/prefetchCache.d.ts +2 -6
- package/dist/src/utils/cleanup.d.ts +1 -0
- package/dist/src/utils/defineConvention.d.ts +2 -2
- package/dist/src/utils/defineEnv.d.ts +4 -4
- package/dist/src/utils/formatBytes.d.ts +2 -0
- package/dist/src/utils/generatedDir.d.ts +1 -1
- package/dist/src/utils/iconVersion.d.ts +5 -0
- package/dist/src/utils/imageProcessing.d.ts +1 -1
- package/dist/src/utils/index.d.ts +2 -0
- package/dist/src/utils/inlinePageCss.d.ts +9 -0
- package/dist/src/utils/instanceRegistry.d.ts +13 -0
- package/dist/src/utils/isTestSourcePath.d.ts +1 -0
- package/dist/src/utils/jsonLd.d.ts +1 -1
- package/dist/src/utils/loadConfig.d.ts +11 -3
- package/dist/src/utils/logger.d.ts +2 -0
- package/dist/src/utils/portScan.d.ts +22 -0
- package/dist/src/utils/projectRoot.d.ts +17 -0
- package/dist/src/utils/resolveConvention.d.ts +1 -1
- package/dist/src/utils/resolveDevPort.d.ts +4 -1
- package/dist/src/utils/runtimeMode.d.ts +1 -1
- package/dist/src/utils/spaRouteCss.d.ts +10 -0
- package/dist/src/utils/spaRouteManifest.d.ts +8 -0
- package/dist/src/utils/stripStringsAndComments.d.ts +18 -0
- package/dist/src/utils/userAgentFunctions.d.ts +1 -1
- package/dist/src/utils/vueCompiler.d.ts +1 -0
- package/dist/src/vue/components/Image.d.ts +2 -2
- package/dist/src/vue/defineVuePage.d.ts +1 -11
- package/dist/src/vue/index.d.ts +3 -0
- package/dist/src/vue/pageHandler.d.ts +5 -0
- package/dist/src/vue/resolveGeneratedVueModulePath.d.ts +1 -0
- package/dist/src/vue/teleports.d.ts +2 -0
- package/dist/src/vue/useResource.d.ts +65 -0
- package/dist/svelte/browser.js +1 -19
- package/dist/svelte/browser.js.map +3 -3
- package/dist/svelte/components/Head.svelte +7 -1
- package/dist/svelte/index.js +1281 -543
- package/dist/svelte/index.js.map +27 -19
- package/dist/svelte/router/Link.svelte.d.ts +3 -3
- package/dist/svelte/router/Route.svelte.d.ts +5 -5
- package/dist/svelte/router/Router.svelte.d.ts +3 -3
- package/dist/svelte/router/hashMode.ts +6 -12
- package/dist/svelte/router/matchPath.ts +44 -61
- package/dist/svelte/router/page.d.ts +1 -10
- package/dist/svelte/router/page.js +6 -6
- package/dist/svelte/router/prefetchCache.ts +21 -23
- package/dist/svelte/router/viewTransitions.ts +22 -12
- package/dist/svelte/server.js +697 -565
- package/dist/svelte/server.js.map +14 -11
- package/dist/types/absoluteConfig.d.ts +22 -0
- package/dist/types/angular.d.ts +4 -1
- package/dist/types/authPanel.d.ts +62 -0
- package/dist/types/build.d.ts +116 -0
- package/dist/types/cli.d.ts +57 -0
- package/dist/types/config.d.ts +52 -0
- package/dist/types/eslintConfig.d.ts +68 -0
- package/dist/types/globals.d.ts +31 -10
- package/dist/types/image.d.ts +2 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/integrationsPanel.d.ts +29 -0
- package/dist/types/messages.d.ts +12 -0
- package/dist/types/packageJson.d.ts +74 -0
- package/dist/types/packageJsonPanel.d.ts +29 -0
- package/dist/types/prettier.d.ts +26 -0
- package/dist/types/tsconfig.d.ts +31 -0
- package/dist/types/vue.d.ts +13 -15
- package/dist/vue/browser.js +14 -36
- package/dist/vue/browser.js.map +5 -5
- package/dist/vue/components/Image.js +3 -20
- package/dist/vue/components/Image.js.map +3 -3
- package/dist/vue/components/index.js +3 -20
- package/dist/vue/components/index.js.map +3 -3
- package/dist/vue/index.js +1573 -620
- package/dist/vue/index.js.map +34 -22
- package/dist/vue/server.js +800 -520
- package/dist/vue/server.js.map +17 -11
- package/package.json +145 -68
- package/dist/src/react/UniversalRouter.d.ts +0 -12
package/dist/vue/server.js
CHANGED
|
@@ -3,7 +3,6 @@ var __create = Object.create;
|
|
|
3
3
|
var __getProtoOf = Object.getPrototypeOf;
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
7
|
function __accessProp(key) {
|
|
9
8
|
return this[key];
|
|
@@ -30,23 +29,6 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
30
29
|
cache.set(mod, to);
|
|
31
30
|
return to;
|
|
32
31
|
};
|
|
33
|
-
var __toCommonJS = (from) => {
|
|
34
|
-
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
35
|
-
if (entry)
|
|
36
|
-
return entry;
|
|
37
|
-
entry = __defProp({}, "__esModule", { value: true });
|
|
38
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
39
|
-
for (var key of __getOwnPropNames(from))
|
|
40
|
-
if (!__hasOwnProp.call(entry, key))
|
|
41
|
-
__defProp(entry, key, {
|
|
42
|
-
get: __accessProp.bind(from, key),
|
|
43
|
-
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
__moduleCache.set(from, entry);
|
|
47
|
-
return entry;
|
|
48
|
-
};
|
|
49
|
-
var __moduleCache;
|
|
50
32
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
51
33
|
var __returnValue = (v) => v;
|
|
52
34
|
function __exportSetter(name, newValue) {
|
|
@@ -78,23 +60,465 @@ var __legacyMetadataTS = (k, v) => {
|
|
|
78
60
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
79
61
|
var __require = import.meta.require;
|
|
80
62
|
|
|
81
|
-
// src/
|
|
82
|
-
var
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
63
|
+
// src/utils/inlinePageCss.ts
|
|
64
|
+
var siblingCssCache, clearSiblingCssCache = () => {
|
|
65
|
+
siblingCssCache.clear();
|
|
66
|
+
}, injectInlineCss = (headTag, css) => {
|
|
67
|
+
if (!css)
|
|
68
|
+
return headTag;
|
|
69
|
+
const styleBlock = `<style data-absolute-page-css>${css}</style>`;
|
|
70
|
+
return headTag.replace("</head>", `${styleBlock}</head>`);
|
|
71
|
+
}, readSiblingCss = async (siblingJsPath) => {
|
|
72
|
+
if (!siblingJsPath)
|
|
73
|
+
return "";
|
|
74
|
+
const cssPath = siblingJsPath.replace(/\.js$/, ".css");
|
|
75
|
+
if (cssPath === siblingJsPath)
|
|
76
|
+
return "";
|
|
77
|
+
const cached = siblingCssCache.get(cssPath);
|
|
78
|
+
if (cached !== undefined)
|
|
79
|
+
return cached;
|
|
80
|
+
const { readFile } = await import("fs/promises");
|
|
81
|
+
try {
|
|
82
|
+
const css = await readFile(cssPath, "utf-8");
|
|
83
|
+
siblingCssCache.set(cssPath, css);
|
|
84
|
+
return css;
|
|
85
|
+
} catch {
|
|
86
|
+
siblingCssCache.set(cssPath, "");
|
|
87
|
+
return "";
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
var init_inlinePageCss = __esm(() => {
|
|
91
|
+
siblingCssCache = new Map;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// src/utils/spaRouteCss.ts
|
|
95
|
+
import { readFile } from "fs/promises";
|
|
96
|
+
import { dirname, isAbsolute, resolve } from "path";
|
|
97
|
+
var sideManifestCache, readSideManifest = async (sideManifestPath) => {
|
|
98
|
+
const cached = sideManifestCache.get(sideManifestPath);
|
|
99
|
+
if (cached !== undefined)
|
|
100
|
+
return cached;
|
|
101
|
+
try {
|
|
102
|
+
const raw = await readFile(sideManifestPath, "utf-8");
|
|
103
|
+
const parsed = JSON.parse(raw);
|
|
104
|
+
const routes = Array.isArray(parsed) ? parsed : [];
|
|
105
|
+
sideManifestCache.set(sideManifestPath, routes);
|
|
106
|
+
return routes;
|
|
107
|
+
} catch {
|
|
108
|
+
sideManifestCache.set(sideManifestPath, []);
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
}, compilePathToRegExp = (pattern) => {
|
|
112
|
+
const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
|
|
113
|
+
const withParams = escaped.replace(/:([a-zA-Z_$][a-zA-Z0-9_$]*)/g, "[^/]+").replace(/\\\*/g, ".*");
|
|
114
|
+
return new RegExp(`^${withParams}$`);
|
|
115
|
+
}, routeMatchers, matcherFor = (pattern) => {
|
|
116
|
+
const cached = routeMatchers.get(pattern);
|
|
117
|
+
if (cached !== undefined)
|
|
118
|
+
return cached;
|
|
119
|
+
const compiled = compilePathToRegExp(pattern);
|
|
120
|
+
routeMatchers.set(pattern, compiled);
|
|
121
|
+
return compiled;
|
|
122
|
+
}, findMatchingRoute = (routes, pathname) => {
|
|
123
|
+
for (const route of routes) {
|
|
124
|
+
if (matcherFor(route.path).test(pathname))
|
|
125
|
+
return route;
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}, childCssCache, clearSpaRouteCssCaches = () => {
|
|
129
|
+
sideManifestCache.clear();
|
|
130
|
+
childCssCache.clear();
|
|
131
|
+
}, readChildCss = async (cssPath, sideManifestPath) => {
|
|
132
|
+
if (!cssPath)
|
|
133
|
+
return "";
|
|
134
|
+
const resolvedCssPath = isAbsolute(cssPath) ? cssPath : resolve(dirname(sideManifestPath), cssPath);
|
|
135
|
+
const cached = childCssCache.get(resolvedCssPath);
|
|
136
|
+
if (cached !== undefined)
|
|
137
|
+
return cached;
|
|
138
|
+
try {
|
|
139
|
+
const css = await readFile(resolvedCssPath, "utf-8");
|
|
140
|
+
childCssCache.set(resolvedCssPath, css);
|
|
141
|
+
return css;
|
|
142
|
+
} catch {
|
|
143
|
+
childCssCache.set(resolvedCssPath, "");
|
|
144
|
+
return "";
|
|
145
|
+
}
|
|
146
|
+
}, resolveSpaChildCss = async (siblingJsPath, requestUrl) => {
|
|
147
|
+
if (!siblingJsPath || !requestUrl)
|
|
148
|
+
return "";
|
|
149
|
+
const sideManifestPath = siblingJsPath.replace(/\.js$/, ".spa.json");
|
|
150
|
+
if (sideManifestPath === siblingJsPath)
|
|
151
|
+
return "";
|
|
152
|
+
const routes = await readSideManifest(sideManifestPath);
|
|
153
|
+
if (routes.length === 0)
|
|
154
|
+
return "";
|
|
155
|
+
let pathname;
|
|
156
|
+
try {
|
|
157
|
+
({ pathname } = new URL(requestUrl));
|
|
158
|
+
} catch {
|
|
159
|
+
pathname = requestUrl.split("?")[0] ?? requestUrl;
|
|
160
|
+
}
|
|
161
|
+
const matched = findMatchingRoute(routes, pathname);
|
|
162
|
+
if (!matched)
|
|
163
|
+
return "";
|
|
164
|
+
const { cssPath: routeCssPath } = matched;
|
|
165
|
+
const cssPaths = [
|
|
166
|
+
routeCssPath,
|
|
167
|
+
...routes.map((route) => route.cssPath)
|
|
168
|
+
].filter((childCssPath, index, all) => childCssPath && all.indexOf(childCssPath) === index);
|
|
169
|
+
const chunks = await Promise.all(cssPaths.map((childCssPath) => readChildCss(childCssPath, sideManifestPath)));
|
|
170
|
+
return chunks.filter(Boolean).join(`
|
|
171
|
+
`);
|
|
172
|
+
};
|
|
173
|
+
var init_spaRouteCss = __esm(() => {
|
|
174
|
+
sideManifestCache = new Map;
|
|
175
|
+
routeMatchers = new Map;
|
|
176
|
+
childCssCache = new Map;
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// src/utils/stringModifiers.ts
|
|
180
|
+
var normalizeSlug = (str) => str.trim().replace(/\s+/g, "-").replace(/[^A-Za-z0-9\-_]+/g, "").replace(/[-_]{2,}/g, "-"), toKebab = (str) => normalizeSlug(str).replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), toPascal = (str) => {
|
|
181
|
+
if (!str.includes("-") && !str.includes("_")) {
|
|
182
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
183
|
+
}
|
|
184
|
+
return normalizeSlug(str).split(/[-_]/).filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()).join("");
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
// src/utils/resolveConvention.ts
|
|
188
|
+
import { basename } from "path";
|
|
189
|
+
var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boolean(value) && typeof value === "object", getMap = () => {
|
|
190
|
+
const value = Reflect.get(globalThis, CONVENTIONS_KEY);
|
|
191
|
+
if (isConventionsMap(value))
|
|
192
|
+
return value;
|
|
193
|
+
const empty = {};
|
|
194
|
+
return empty;
|
|
195
|
+
}, derivePageName = (pagePath) => {
|
|
196
|
+
const base = basename(pagePath);
|
|
197
|
+
const dotIndex = base.indexOf(".");
|
|
198
|
+
const name = dotIndex > 0 ? base.slice(0, dotIndex) : base;
|
|
199
|
+
return toPascal(name);
|
|
200
|
+
}, normalizeConventionPageName = (name) => toPascal(name).replace(/\d+$/, ""), hasErrorConvention = (framework) => {
|
|
201
|
+
const conventions = getMap()[framework];
|
|
202
|
+
if (!conventions)
|
|
203
|
+
return false;
|
|
204
|
+
if (conventions.defaults?.error)
|
|
205
|
+
return true;
|
|
206
|
+
return Object.values(conventions.pages ?? {}).some((page) => Boolean(page.error));
|
|
207
|
+
}, resolveErrorConventionPath = (framework, pageName) => {
|
|
208
|
+
const conventions = getMap()[framework];
|
|
209
|
+
if (!conventions)
|
|
210
|
+
return;
|
|
211
|
+
const exact = conventions.pages?.[pageName]?.error;
|
|
212
|
+
if (exact)
|
|
213
|
+
return exact;
|
|
214
|
+
const normalizedPageName = normalizeConventionPageName(pageName);
|
|
215
|
+
for (const [candidate, page] of Object.entries(conventions.pages ?? {})) {
|
|
216
|
+
if (normalizeConventionPageName(candidate) === normalizedPageName) {
|
|
217
|
+
return page.error ?? conventions.defaults?.error;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return conventions.defaults?.error;
|
|
221
|
+
}, resolveNotFoundConventionPath = (framework) => getMap()[framework]?.defaults?.notFound, setConventions = (map) => {
|
|
222
|
+
Reflect.set(globalThis, CONVENTIONS_KEY, map);
|
|
223
|
+
}, isDev = () => true, buildErrorProps = (error) => {
|
|
224
|
+
if (error instanceof Error) {
|
|
225
|
+
return {
|
|
226
|
+
message: error.message,
|
|
227
|
+
name: error.name,
|
|
228
|
+
...isDev() && error.stack ? { stack: error.stack } : {}
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return { message: String(error), name: "Error" };
|
|
232
|
+
}, renderReactError = async (conventionPath, errorProps) => {
|
|
233
|
+
const { createElement } = await import("react");
|
|
234
|
+
const { renderToReadableStream } = await import("react-dom/server");
|
|
235
|
+
const mod = await import(conventionPath);
|
|
236
|
+
const ErrorComponent = mod.default;
|
|
237
|
+
if (typeof ErrorComponent !== "function")
|
|
238
|
+
return null;
|
|
239
|
+
const element = createElement(ErrorComponent, errorProps);
|
|
240
|
+
const stream = await renderToReadableStream(element);
|
|
241
|
+
return new Response(stream, {
|
|
242
|
+
headers: { "Content-Type": "text/html" },
|
|
243
|
+
status: 500
|
|
244
|
+
});
|
|
245
|
+
}, renderSvelteError = async (conventionPath, errorProps) => {
|
|
246
|
+
const { render } = await import("svelte/server");
|
|
247
|
+
const mod = await import(conventionPath);
|
|
248
|
+
const ErrorComponent = mod.default;
|
|
249
|
+
if (!ErrorComponent)
|
|
250
|
+
return null;
|
|
251
|
+
const { head, body } = render(ErrorComponent, {
|
|
252
|
+
props: errorProps
|
|
253
|
+
});
|
|
254
|
+
const html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;
|
|
255
|
+
return new Response(html, {
|
|
256
|
+
headers: { "Content-Type": "text/html" },
|
|
257
|
+
status: 500
|
|
258
|
+
});
|
|
259
|
+
}, unescapeVueStyles = (ssrBody) => {
|
|
260
|
+
let styles = "";
|
|
261
|
+
const body = ssrBody.replace(/<style>([\s\S]*?)<\/style>/g, (_, css) => {
|
|
262
|
+
styles += `<style>${css.replace(/"/g, '"').replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">")}</style>`;
|
|
263
|
+
return "";
|
|
264
|
+
});
|
|
265
|
+
return { body, styles };
|
|
266
|
+
}, renderVueError = async (conventionPath, errorProps) => {
|
|
267
|
+
const { createSSRApp, h } = await import("vue");
|
|
268
|
+
const { renderToString } = await import("vue/server-renderer");
|
|
269
|
+
const mod = await import(conventionPath);
|
|
270
|
+
const ErrorComponent = mod.default;
|
|
271
|
+
if (!ErrorComponent)
|
|
272
|
+
return null;
|
|
273
|
+
const app = createSSRApp({
|
|
274
|
+
render: () => h(ErrorComponent, errorProps)
|
|
275
|
+
});
|
|
276
|
+
const rawBody = await renderToString(app);
|
|
277
|
+
const { styles, body } = unescapeVueStyles(rawBody);
|
|
278
|
+
const html = `<!DOCTYPE html><html><head>${styles}</head><body><div id="root">${body}</div></body></html>`;
|
|
279
|
+
return new Response(html, {
|
|
280
|
+
headers: { "Content-Type": "text/html" },
|
|
281
|
+
status: 500
|
|
282
|
+
});
|
|
283
|
+
}, renderAngularError = async (conventionPath, errorProps) => {
|
|
284
|
+
const mod = await import(conventionPath);
|
|
285
|
+
const renderFn = mod.default;
|
|
286
|
+
if (typeof renderFn !== "function")
|
|
287
|
+
return null;
|
|
288
|
+
const html = renderFn(errorProps);
|
|
289
|
+
return new Response(html, {
|
|
290
|
+
headers: { "Content-Type": "text/html" },
|
|
291
|
+
status: 500
|
|
292
|
+
});
|
|
293
|
+
}, escapeHtml = (value) => value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'"), replaceErrorTokens = (template, errorProps) => template.replace(/\{\{\s*name\s*\}\}/g, escapeHtml(errorProps.name)).replace(/\{\{\s*message\s*\}\}/g, escapeHtml(errorProps.message)).replace(/\{\{\s*stack\s*\}\}/g, errorProps.stack ? escapeHtml(errorProps.stack) : ""), renderHtmlError = async (conventionPath, errorProps) => {
|
|
294
|
+
const template = await Bun.file(conventionPath).text();
|
|
295
|
+
const html = replaceErrorTokens(template, errorProps);
|
|
296
|
+
return new Response(html, {
|
|
297
|
+
headers: { "Content-Type": "text/html" },
|
|
298
|
+
status: 500
|
|
299
|
+
});
|
|
300
|
+
}, logConventionRenderError = (framework, label, renderError) => {
|
|
301
|
+
const message = renderError instanceof Error ? renderError.message : "";
|
|
302
|
+
if (message.includes("Cannot find module") || message.includes("Cannot find package") || message.includes("not found in module")) {
|
|
303
|
+
console.error(`[SSR] Convention ${label} page for ${framework} failed: missing framework package. Ensure the ${framework} runtime is installed (e.g. bun add ${framework === "react" ? "react react-dom" : framework}).`);
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
console.error(`[SSR] Failed to render ${framework} convention ${label} page:`, renderError);
|
|
307
|
+
}, renderEmberError = async () => null, renderEmberNotFound = async () => null, ERROR_RENDERERS, tryFrameworkErrorConvention = async (framework, pageName, errorProps, error) => {
|
|
308
|
+
let conventionPath = resolveErrorConventionPath(framework, pageName);
|
|
309
|
+
if (!conventionPath && error instanceof Error && error.stack) {
|
|
310
|
+
for (const match of error.stack.matchAll(/^\s*at\s+([A-Za-z_$][\w$]*)/gm)) {
|
|
311
|
+
const [, candidate] = match;
|
|
312
|
+
if (!candidate)
|
|
313
|
+
continue;
|
|
314
|
+
conventionPath = resolveErrorConventionPath(framework, candidate);
|
|
315
|
+
if (conventionPath)
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (!conventionPath)
|
|
320
|
+
return null;
|
|
321
|
+
const renderer = ERROR_RENDERERS[framework];
|
|
322
|
+
if (!renderer)
|
|
323
|
+
return null;
|
|
324
|
+
try {
|
|
325
|
+
return await renderer(conventionPath, errorProps);
|
|
326
|
+
} catch (renderError) {
|
|
327
|
+
logConventionRenderError(framework, "error", renderError);
|
|
328
|
+
}
|
|
329
|
+
return null;
|
|
330
|
+
}, renderConventionError = async (framework, pageName, error) => {
|
|
331
|
+
const errorProps = buildErrorProps(error);
|
|
332
|
+
const frameworkResponse = await tryFrameworkErrorConvention(framework, pageName, errorProps, error);
|
|
333
|
+
if (frameworkResponse)
|
|
334
|
+
return frameworkResponse;
|
|
335
|
+
if (framework !== "html") {
|
|
336
|
+
const htmlResponse = await tryFrameworkErrorConvention("html", pageName, errorProps, error);
|
|
337
|
+
if (htmlResponse)
|
|
338
|
+
return htmlResponse;
|
|
339
|
+
}
|
|
340
|
+
return null;
|
|
341
|
+
}, renderReactNotFound = async (conventionPath) => {
|
|
342
|
+
const { createElement } = await import("react");
|
|
343
|
+
const { renderToReadableStream } = await import("react-dom/server");
|
|
344
|
+
const mod = await import(conventionPath);
|
|
345
|
+
const NotFoundComponent = mod.default;
|
|
346
|
+
if (typeof NotFoundComponent !== "function")
|
|
347
|
+
return null;
|
|
348
|
+
const element = createElement(NotFoundComponent);
|
|
349
|
+
const stream = await renderToReadableStream(element);
|
|
350
|
+
return new Response(stream, {
|
|
351
|
+
headers: { "Content-Type": "text/html" },
|
|
352
|
+
status: 404
|
|
353
|
+
});
|
|
354
|
+
}, renderSvelteNotFound = async (conventionPath) => {
|
|
355
|
+
const { render } = await import("svelte/server");
|
|
356
|
+
const mod = await import(conventionPath);
|
|
357
|
+
const NotFoundComponent = mod.default;
|
|
358
|
+
if (!NotFoundComponent)
|
|
359
|
+
return null;
|
|
360
|
+
const { head, body } = render(NotFoundComponent);
|
|
361
|
+
const html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;
|
|
362
|
+
return new Response(html, {
|
|
363
|
+
headers: { "Content-Type": "text/html" },
|
|
364
|
+
status: 404
|
|
365
|
+
});
|
|
366
|
+
}, renderVueNotFound = async (conventionPath) => {
|
|
367
|
+
const { createSSRApp, h } = await import("vue");
|
|
368
|
+
const { renderToString } = await import("vue/server-renderer");
|
|
369
|
+
const mod = await import(conventionPath);
|
|
370
|
+
const NotFoundComponent = mod.default;
|
|
371
|
+
if (!NotFoundComponent)
|
|
372
|
+
return null;
|
|
373
|
+
const app = createSSRApp({
|
|
374
|
+
render: () => h(NotFoundComponent)
|
|
375
|
+
});
|
|
376
|
+
const rawBody = await renderToString(app);
|
|
377
|
+
const { styles, body } = unescapeVueStyles(rawBody);
|
|
378
|
+
const html = `<!DOCTYPE html><html><head>${styles}</head><body><div id="root">${body}</div></body></html>`;
|
|
379
|
+
return new Response(html, {
|
|
380
|
+
headers: { "Content-Type": "text/html" },
|
|
381
|
+
status: 404
|
|
382
|
+
});
|
|
383
|
+
}, renderAngularNotFound = async (conventionPath) => {
|
|
384
|
+
const mod = await import(conventionPath);
|
|
385
|
+
const renderFn = mod.default;
|
|
386
|
+
if (typeof renderFn !== "function")
|
|
387
|
+
return null;
|
|
388
|
+
const html = renderFn();
|
|
389
|
+
return new Response(html, {
|
|
390
|
+
headers: { "Content-Type": "text/html" },
|
|
391
|
+
status: 404
|
|
392
|
+
});
|
|
393
|
+
}, renderHtmlNotFound = async (conventionPath) => {
|
|
394
|
+
const html = await Bun.file(conventionPath).text();
|
|
395
|
+
return new Response(html, {
|
|
396
|
+
headers: { "Content-Type": "text/html" },
|
|
397
|
+
status: 404
|
|
398
|
+
});
|
|
399
|
+
}, NOT_FOUND_RENDERERS, renderConventionNotFound = async (framework) => {
|
|
400
|
+
const conventionPath = resolveNotFoundConventionPath(framework);
|
|
401
|
+
if (!conventionPath)
|
|
402
|
+
return null;
|
|
403
|
+
const renderer = NOT_FOUND_RENDERERS[framework];
|
|
404
|
+
if (!renderer)
|
|
405
|
+
return null;
|
|
406
|
+
try {
|
|
407
|
+
return await renderer(conventionPath);
|
|
408
|
+
} catch (renderError) {
|
|
409
|
+
logConventionRenderError(framework, "not-found", renderError);
|
|
410
|
+
}
|
|
411
|
+
return null;
|
|
412
|
+
}, NOT_FOUND_PRIORITY, renderFirstNotFound = async () => {
|
|
413
|
+
const renderNext = async (frameworks) => {
|
|
414
|
+
const [framework, ...remaining] = frameworks;
|
|
415
|
+
if (!framework) {
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
if (!getMap()[framework]?.defaults?.notFound) {
|
|
419
|
+
return renderNext(remaining);
|
|
420
|
+
}
|
|
421
|
+
const response = await renderConventionNotFound(framework);
|
|
422
|
+
if (response) {
|
|
423
|
+
return response;
|
|
424
|
+
}
|
|
425
|
+
return renderNext(remaining);
|
|
426
|
+
};
|
|
427
|
+
return renderNext(NOT_FOUND_PRIORITY);
|
|
428
|
+
};
|
|
429
|
+
var init_resolveConvention = __esm(() => {
|
|
430
|
+
ERROR_RENDERERS = {
|
|
431
|
+
angular: renderAngularError,
|
|
432
|
+
ember: renderEmberError,
|
|
433
|
+
html: renderHtmlError,
|
|
434
|
+
react: renderReactError,
|
|
435
|
+
svelte: renderSvelteError,
|
|
436
|
+
vue: renderVueError
|
|
437
|
+
};
|
|
438
|
+
NOT_FOUND_RENDERERS = {
|
|
439
|
+
angular: renderAngularNotFound,
|
|
440
|
+
ember: renderEmberNotFound,
|
|
441
|
+
html: renderHtmlNotFound,
|
|
442
|
+
react: renderReactNotFound,
|
|
443
|
+
svelte: renderSvelteNotFound,
|
|
444
|
+
vue: renderVueNotFound
|
|
445
|
+
};
|
|
446
|
+
NOT_FOUND_PRIORITY = [
|
|
447
|
+
"react",
|
|
448
|
+
"svelte",
|
|
449
|
+
"vue",
|
|
450
|
+
"angular",
|
|
451
|
+
"html"
|
|
93
452
|
];
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
// src/utils/spaRouteManifest.ts
|
|
456
|
+
import { basename as basename2 } from "path";
|
|
457
|
+
var SPA_ROUTES_KEY = "__absoluteSpaRoutes", setSpaRouteManifest = (hosts) => {
|
|
458
|
+
Reflect.set(globalThis, SPA_ROUTES_KEY, hosts);
|
|
459
|
+
}, isRuntimeSpaHost = (value) => typeof value === "object" && value !== null && typeof Reflect.get(value, "framework") === "string", getSpaRouteManifest = () => {
|
|
460
|
+
const value = Reflect.get(globalThis, SPA_ROUTES_KEY);
|
|
461
|
+
return Array.isArray(value) ? value.filter(isRuntimeSpaHost) : [];
|
|
462
|
+
}, normalizePath = (path) => {
|
|
463
|
+
const withLeadingSlash = path.startsWith("/") ? path : `/${path}`;
|
|
464
|
+
const trimmed = withLeadingSlash.replace(/\/+$/, "");
|
|
465
|
+
return trimmed || "/";
|
|
466
|
+
}, fullRoutePath = (baseHref, routePath) => {
|
|
467
|
+
const base = normalizePath(baseHref);
|
|
468
|
+
const route = normalizePath(routePath);
|
|
469
|
+
if (base !== "/" && (route === base || route.startsWith(`${base}/`))) {
|
|
470
|
+
return route;
|
|
471
|
+
}
|
|
472
|
+
if (base === "/")
|
|
473
|
+
return route;
|
|
474
|
+
return normalizePath(`${base}/${route.replace(/^\/+/, "")}`);
|
|
475
|
+
}, routePattern = (path) => {
|
|
476
|
+
const segments = normalizePath(path).split("/").filter(Boolean);
|
|
477
|
+
let expression = "^";
|
|
478
|
+
for (const segment of segments) {
|
|
479
|
+
if (segment === "*" || segment === "**") {
|
|
480
|
+
expression += "(?:/.*)?";
|
|
481
|
+
continue;
|
|
482
|
+
}
|
|
483
|
+
const parameter = /^:[A-Za-z_$][A-Za-z0-9_$]*(?:\((.*)\))?(\?)?$/.exec(segment);
|
|
484
|
+
if (parameter) {
|
|
485
|
+
const valuePattern = parameter[1] || "[^/]+";
|
|
486
|
+
expression += parameter[2] ? `(?:/${valuePattern})?` : `/${valuePattern}`;
|
|
487
|
+
continue;
|
|
488
|
+
}
|
|
489
|
+
expression += `/${segment.replace(/[.+?^${}()|[\]\\]/g, "\\$&")}`;
|
|
490
|
+
}
|
|
491
|
+
return new RegExp(`${expression || "^/"}/?$`);
|
|
492
|
+
}, sourcePageName = (sourceFile) => basename2(sourceFile).replace(/\.[^.]+$/, "").toLowerCase(), isKnownSpaRoute = (framework, pageName, request) => {
|
|
493
|
+
if (!request)
|
|
494
|
+
return true;
|
|
495
|
+
let pathname;
|
|
496
|
+
try {
|
|
497
|
+
pathname = normalizePath(new URL(request.url).pathname);
|
|
498
|
+
} catch {
|
|
499
|
+
return true;
|
|
500
|
+
}
|
|
501
|
+
const hosts = getSpaRouteManifest().filter((host) => {
|
|
502
|
+
if (host.framework !== framework)
|
|
503
|
+
return false;
|
|
504
|
+
if (sourcePageName(host.sourceFile) !== pageName.toLowerCase())
|
|
505
|
+
return false;
|
|
506
|
+
const base = normalizePath(host.baseHref);
|
|
507
|
+
return base === "/" || pathname === base || pathname.startsWith(`${base}/`);
|
|
508
|
+
});
|
|
509
|
+
if (hosts.length === 0)
|
|
510
|
+
return true;
|
|
511
|
+
return hosts.some((host) => host.routes.some((route) => routePattern(fullRoutePath(host.baseHref, route.path)).test(pathname)));
|
|
512
|
+
}, renderSpaNotFound = async (framework, pageName, request) => {
|
|
513
|
+
if (isKnownSpaRoute(framework, pageName, request))
|
|
514
|
+
return null;
|
|
515
|
+
return await renderFirstNotFound() ?? new Response("Not found", {
|
|
516
|
+
headers: { "Content-Type": "text/plain" },
|
|
517
|
+
status: 404
|
|
518
|
+
});
|
|
519
|
+
};
|
|
520
|
+
var init_spaRouteManifest = __esm(() => {
|
|
521
|
+
init_resolveConvention();
|
|
98
522
|
});
|
|
99
523
|
|
|
100
524
|
// src/core/devRouteRegistrationCallsite.ts
|
|
@@ -107,22 +531,20 @@ __export(exports_devRouteRegistrationCallsite, {
|
|
|
107
531
|
});
|
|
108
532
|
import { AsyncLocalStorage } from "async_hooks";
|
|
109
533
|
import { Elysia } from "elysia";
|
|
110
|
-
var ROUTE_CALLSITE_STORAGE_KEY, ROUTE_CALLSITE_PATCHED_KEY, ROUTE_METHOD_NAMES, PAGE_HANDLER_NAMES, pageHandlerWrappers, handlerSourceMentionsPageHelper = (handler) => {
|
|
534
|
+
var ROUTE_CALLSITE_STORAGE_KEY, ROUTE_CALLSITE_PATCHED_KEY, NODE_ENV_KEY = "NODE_ENV", ROUTE_METHOD_NAMES, PAGE_HANDLER_NAMES, pageHandlerWrappers, isPageHandlerFunction = (value) => typeof value === "function", handlerSourceMentionsPageHelper = (handler) => {
|
|
111
535
|
const source = handler.toString();
|
|
112
536
|
return PAGE_HANDLER_NAMES.some((name) => source.includes(name));
|
|
537
|
+
}, getOriginalPageHandlerSource = (handler) => {
|
|
538
|
+
if (!isPageHandlerFunction(handler))
|
|
539
|
+
return;
|
|
540
|
+
const info = pageHandlerWrappers.get(handler);
|
|
541
|
+
return (info?.originalHandler ?? handler).toString();
|
|
113
542
|
}, isPageHandler = (handler) => {
|
|
114
|
-
if (
|
|
543
|
+
if (!isPageHandlerFunction(handler))
|
|
115
544
|
return false;
|
|
116
|
-
|
|
117
|
-
if (pageHandlerWrappers.has(fn))
|
|
545
|
+
if (pageHandlerWrappers.has(handler))
|
|
118
546
|
return true;
|
|
119
|
-
return handlerSourceMentionsPageHelper(
|
|
120
|
-
}, getOriginalPageHandlerSource = (handler) => {
|
|
121
|
-
if (typeof handler !== "function")
|
|
122
|
-
return;
|
|
123
|
-
const fn = handler;
|
|
124
|
-
const info = pageHandlerWrappers.get(fn);
|
|
125
|
-
return (info?.originalHandler ?? fn).toString();
|
|
547
|
+
return handlerSourceMentionsPageHelper(handler);
|
|
126
548
|
}, isObjectRecord3 = (value) => Boolean(value) && typeof value === "object", isAsyncLocalStorage2 = (value) => isObjectRecord3(value) && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function", isRouteMethod = (value) => typeof value === "function", getRouteCallsiteStorage = () => {
|
|
127
549
|
const value = Reflect.get(globalThis, ROUTE_CALLSITE_STORAGE_KEY);
|
|
128
550
|
if (value === null || typeof value === "undefined") {
|
|
@@ -156,17 +578,22 @@ var ROUTE_CALLSITE_STORAGE_KEY, ROUTE_CALLSITE_PATCHED_KEY, ROUTE_METHOD_NAMES,
|
|
|
156
578
|
return function wrappedRouteHandler(...args) {
|
|
157
579
|
return storage.run({ callsite }, () => Reflect.apply(routeHandler, this, args));
|
|
158
580
|
};
|
|
159
|
-
}, createPatchedRouteMethod = (originalMethod, methodName) => function patchedRouteMethod(path,
|
|
581
|
+
}, createPatchedRouteMethod = (originalMethod, methodName) => function patchedRouteMethod(path, ...routeArguments) {
|
|
582
|
+
const handlerIndex = routeArguments.length >= 2 ? 1 : 0;
|
|
583
|
+
const handler = routeArguments[handlerIndex];
|
|
160
584
|
const callsite = captureRouteRegistrationCallsite();
|
|
161
585
|
const wrapped = wrapRouteHandlerWithCallsite(handler, callsite);
|
|
162
|
-
if (methodName === "get" &&
|
|
586
|
+
if (methodName === "get" && isPageHandlerFunction(handler) && isPageHandlerFunction(wrapped) && handlerSourceMentionsPageHelper(handler)) {
|
|
163
587
|
pageHandlerWrappers.set(wrapped, {
|
|
164
588
|
originalHandler: handler
|
|
165
589
|
});
|
|
166
590
|
}
|
|
167
|
-
|
|
591
|
+
routeArguments[handlerIndex] = wrapped;
|
|
592
|
+
return Reflect.apply(originalMethod, this, [path, ...routeArguments]);
|
|
168
593
|
}, getCurrentRouteRegistrationCallsite = () => getRouteCallsiteStorage()?.getStore()?.callsite, patchElysiaRouteRegistrationCallsites = () => {
|
|
169
|
-
if (
|
|
594
|
+
if (process.env[NODE_ENV_KEY] === "production") {
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
170
597
|
if (Reflect.get(globalThis, ROUTE_CALLSITE_PATCHED_KEY) === true) {
|
|
171
598
|
return;
|
|
172
599
|
}
|
|
@@ -203,6 +630,43 @@ var init_devRouteRegistrationCallsite = __esm(() => {
|
|
|
203
630
|
pageHandlerWrappers = new WeakMap;
|
|
204
631
|
});
|
|
205
632
|
|
|
633
|
+
// src/core/pageResponseCache.ts
|
|
634
|
+
import { createHash } from "crypto";
|
|
635
|
+
var STREAMING_PAGE_HEADER = "x-absolute-stream", HTML_CONTENT_TYPE = "text/html", streamingPageHeaders = (extra) => {
|
|
636
|
+
const headers = new Headers(extra);
|
|
637
|
+
headers.set("content-type", HTML_CONTENT_TYPE);
|
|
638
|
+
headers.set(STREAMING_PAGE_HEADER, "1");
|
|
639
|
+
return headers;
|
|
640
|
+
}, computeEtag = (html) => `W/"${createHash("sha1").update(html).digest("base64url")}"`, withPageCacheHeaders = async (response, request, options) => {
|
|
641
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
642
|
+
if (!contentType.includes(HTML_CONTENT_TYPE))
|
|
643
|
+
return response;
|
|
644
|
+
const isStreaming = response.headers.get(STREAMING_PAGE_HEADER) === "1";
|
|
645
|
+
if (isStreaming && !options?.bufferStreamForEtag || !response.body) {
|
|
646
|
+
response.headers.delete(STREAMING_PAGE_HEADER);
|
|
647
|
+
response.headers.set("cache-control", "no-cache");
|
|
648
|
+
return response;
|
|
649
|
+
}
|
|
650
|
+
const html = await response.text();
|
|
651
|
+
const etag = computeEtag(html);
|
|
652
|
+
if (request?.headers.get("if-none-match") === etag) {
|
|
653
|
+
return new Response(null, {
|
|
654
|
+
headers: { "cache-control": "no-cache", etag },
|
|
655
|
+
status: 304
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
const headers = new Headers(response.headers);
|
|
659
|
+
headers.delete(STREAMING_PAGE_HEADER);
|
|
660
|
+
headers.set("cache-control", "no-cache");
|
|
661
|
+
headers.set("etag", etag);
|
|
662
|
+
return new Response(html, {
|
|
663
|
+
headers,
|
|
664
|
+
status: response.status,
|
|
665
|
+
statusText: response.statusText
|
|
666
|
+
});
|
|
667
|
+
};
|
|
668
|
+
var init_pageResponseCache = () => {};
|
|
669
|
+
|
|
206
670
|
// src/client/streamSwap.ts
|
|
207
671
|
var streamSwapRuntime = () => {
|
|
208
672
|
const absoluteWindow = window;
|
|
@@ -312,6 +776,26 @@ var streamSwapRuntime = () => {
|
|
|
312
776
|
return value.slice(start + 1, end);
|
|
313
777
|
}, getStreamSwapRuntimeScript = () => `(function(){${stripFunctionWrapper(streamSwapRuntime.toString())}})();`;
|
|
314
778
|
|
|
779
|
+
// src/constants.ts
|
|
780
|
+
var ANGULAR_INIT_TIMEOUT_MS = 500, ANSI_ESCAPE_CODE = 27, ANSI_ESCAPE_LENGTH = 3, ASCII_SPACE = 32, BASE_36_RADIX = 36, BUN_BUILD_WARNING_SUPPRESSION = "wildcard sideEffects are not supported yet", TAILWIND_BUN_CSS_WARNING_PATTERN, BODY_SLICE_LENGTH = 2000, BYTES_PER_KILOBYTE = 1024, CLI_ARGS_OFFSET = 3, CSS_ERROR_RESOLVE_DELAY_MS = 50, CSS_MAX_CHECK_ATTEMPTS = 10, CSS_MAX_PARSE_TIMEOUT_MS = 500, CSS_SHEET_READY_TIMEOUT_MS = 100, DEFAULT_CHUNK_SIZE = 16384, DEFAULT_DEBOUNCE_MS = 15, DEFAULT_PORT = 3000, DEV_SERVER_RESTART_DEBOUNCE_MS = 100, DOM_UPDATE_DELAY_MS = 50, FILE_PROTOCOL_PREFIX_LENGTH = 7, FOCUS_ID_PREFIX_LENGTH = 3, FOCUS_IDX_PREFIX_LENGTH = 4, FOCUS_NAME_PREFIX_LENGTH = 5, ESLINT_STUDIO_DEFAULT_HOST = "eslint.absolute.localhost", ESLINT_STUDIO_DEFAULT_PORT = 4099, CONFIG_DEFAULT_HOST = "config.absolute.localhost", CONFIG_DEFAULT_PORT = 4099, HMR_UPDATE_TIMEOUT_MS = 2000, HOOK_SIGNATURE_LENGTH = 12, EXCLUDE_LAST_OFFSET = -1, HTTP_STATUS_OK = 200, HTTP_STATUS_BAD_REQUEST = 400, HTTP_STATUS_NOT_FOUND = 404, HOURS_IN_DAY = 24, HOURS_IN_HALF_DAY = 12, IMAGE_DEFAULT_DEVICE_SIZES, IMAGE_DEFAULT_IMAGE_SIZES, IMAGE_DEFAULT_QUALITY = 75, IMAGE_GLOB_SUFFIX_LENGTH = 2, INSTANCE_PROBE_TIMEOUT_MS = 250, MAX_ERROR_LENGTH = 200, MAX_RECONNECT_ATTEMPTS = 60, MILLISECONDS_IN_A_SECOND = 1000, MINUTES_IN_AN_HOUR = 60, SECONDS_IN_A_MINUTE = 60, MILLISECONDS_IN_A_MINUTE, MILLISECONDS_IN_A_DAY, OVERLAY_FADE_DURATION_MS = 150, PING_INTERVAL_MS = 30000, LIST_LOG_TAIL_MAX_BYTES = 65536, LIST_TUI_COLUMN_GAP = 2, LIST_TUI_DEFAULT_HEIGHT = 28, LIST_TUI_DEFAULT_WIDTH = 100, LIST_TUI_ESCAPE_SEQUENCE_TIMEOUT_MS = 30, LIST_TUI_FOOTER_LINE_COUNT = 2, LIST_TUI_MARKER_WIDTH = 2, LIST_TUI_MIN_LOG_HEIGHT = 3, LIST_TUI_MIN_URL_WIDTH = 16, LIST_TUI_RENDER_DEBOUNCE_MS = 16, LIST_TUI_STATUS_MESSAGE_TIMEOUT_MS = 4000, LIST_WATCH_REFRESH_MS = 1000, RAF_BATCH_COUNT = 3, RANDOM_ID_END_INDEX = 11, REBUILD_BATCH_DELAY_MS = 10, REBUILD_RELOAD_DELAY_MS = 200, RECONNECT_INITIAL_DELAY_MS = 500, RECONNECT_POLL_INTERVAL_MS = 300, REACT_STREAM_SLOT_FAST_DELAY_MS = 5, REACT_STREAM_SLOT_SLOW_DELAY_MS = 20, SIGINT_EXIT_CODE = 130, SIGTERM_EXIT_CODE = 143, SVELTE_CSS_LOAD_TIMEOUT_MS = 500, TIME_PRECISION = 2, TWO_THIRDS, UNFOUND_INDEX = -1, WEBSOCKET_NORMAL_CLOSURE = 1000, DEFAULT_WEBSOCKET_IDLE_TIMEOUT_SECONDS = 240, DEFAULT_HTTP_IDLE_TIMEOUT_SECONDS = 240, MAX_HTTP_IDLE_TIMEOUT_SECONDS = 255, WORKSPACE_COMMAND_ARGS_OFFSET = 3, WORKSPACE_FAILURE_LOG_PRINT_LIMIT = 30, WORKSPACE_FAILURE_RECENT_LOG_LIMIT = 60, WORKSPACE_READY_ATTEMPT_TIMEOUT_MS = 5000, WORKSPACE_READY_PROBE_INTERVAL_MS = 250, WORKSPACE_READY_TIMEOUT_MS = 30000, WORKSPACE_SHUTDOWN_TIMEOUT_MS = 1e4, WORKSPACE_TUI_DEFAULT_HEIGHT = 28, WORKSPACE_TUI_DEFAULT_WIDTH = 100, WORKSPACE_TUI_ESCAPE_SEQUENCE_TIMEOUT_MS = 30, WORKSPACE_TUI_FOOTER_LINE_COUNT = 3, WORKSPACE_TUI_MIN_LOG_HEIGHT = 3, WORKSPACE_TUI_MIN_SERVICE_NAME_WIDTH = 7, WORKSPACE_TUI_MIN_TARGET_WIDTH = 8, WORKSPACE_TUI_MIN_WRAP_WIDTH = 12, WORKSPACE_TUI_PROMPT_CURSOR_OFFSET = 3, WORKSPACE_TUI_RECENT_LOG_LIMIT = 40, WORKSPACE_TUI_RENDER_DEBOUNCE_MS = 16, WORKSPACE_TUI_STATUS_WIDTH = 10, WORKSPACE_TUI_TARGET_PADDING_WIDTH = 6, WORKSPACE_TUI_VISIBILITY_WIDTH = 8;
|
|
781
|
+
var init_constants = __esm(() => {
|
|
782
|
+
TAILWIND_BUN_CSS_WARNING_PATTERN = /invalid @ rule encountered: '@(theme|tailwind|source|utility|variant|custom-variant|apply|reference|plugin|config)'/;
|
|
783
|
+
IMAGE_DEFAULT_DEVICE_SIZES = [
|
|
784
|
+
640,
|
|
785
|
+
750,
|
|
786
|
+
828,
|
|
787
|
+
1080,
|
|
788
|
+
1200,
|
|
789
|
+
1920,
|
|
790
|
+
2048,
|
|
791
|
+
3840
|
|
792
|
+
];
|
|
793
|
+
IMAGE_DEFAULT_IMAGE_SIZES = [16, 32, 48, 64, 96, 128, 256, 384];
|
|
794
|
+
MILLISECONDS_IN_A_MINUTE = MILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE;
|
|
795
|
+
MILLISECONDS_IN_A_DAY = MILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE * MINUTES_IN_AN_HOUR * HOURS_IN_DAY;
|
|
796
|
+
TWO_THIRDS = 2 / 3;
|
|
797
|
+
});
|
|
798
|
+
|
|
315
799
|
// src/utils/escapeScriptContent.ts
|
|
316
800
|
var ESCAPE_LOOKUP, ESCAPE_REGEX, escapeScriptContent = (content) => content.replace(ESCAPE_REGEX, (char) => {
|
|
317
801
|
const escaped = ESCAPE_LOOKUP[char];
|
|
@@ -988,6 +1472,19 @@ var colors2, frameworkColors, formatPath = (filePath) => {
|
|
|
988
1472
|
const errorMsg = error instanceof Error ? error.message : error;
|
|
989
1473
|
const fullMessage = `${colors2.red}error${colors2.reset} ${message}${errorMsg ? `: ${errorMsg}` : ""}`;
|
|
990
1474
|
console.error(`${timestamp} ${tag} ${fullMessage}`);
|
|
1475
|
+
}, logHmrClientUpdate = (path, framework, duration, target, serverMs, clientMs, outcome = "applied", kind) => {
|
|
1476
|
+
const timestamp = `${colors2.dim}${formatTimestamp()}${colors2.reset}`;
|
|
1477
|
+
const targetLabel = target.startsWith("capacitor-") ? target.slice("capacitor-".length) : target;
|
|
1478
|
+
const tag = `${colors2.cyan}[hmr:${targetLabel}]${colors2.reset}`;
|
|
1479
|
+
const pathColor = framework ? getFrameworkColor(framework) : colors2.white;
|
|
1480
|
+
const breakdown = serverMs === undefined || clientMs === undefined ? "" : `; server ${serverMs}ms, client ${clientMs}ms`;
|
|
1481
|
+
let action = "failed after";
|
|
1482
|
+
if (outcome === "applied")
|
|
1483
|
+
action = "applied in";
|
|
1484
|
+
else if (outcome === "reloaded")
|
|
1485
|
+
action = "falling back to reload after";
|
|
1486
|
+
const kindLabel = kind ? `${kind} ` : "";
|
|
1487
|
+
console.log(`${timestamp} ${tag} ${framework ?? "update"} ${kindLabel}${pathColor}${formatPath(path)}${colors2.reset} ${colors2.dim}${action} ${duration}ms${breakdown}${colors2.reset}`);
|
|
991
1488
|
}, logHmrUpdate = (path, framework, duration) => {
|
|
992
1489
|
log("hmr update", { duration, framework, path });
|
|
993
1490
|
}, logInfo = (message) => {
|
|
@@ -1083,14 +1580,6 @@ body{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,r
|
|
|
1083
1580
|
</html>`;
|
|
1084
1581
|
};
|
|
1085
1582
|
|
|
1086
|
-
// src/utils/stringModifiers.ts
|
|
1087
|
-
var normalizeSlug = (str) => str.trim().replace(/\s+/g, "-").replace(/[^A-Za-z0-9\-_]+/g, "").replace(/[-_]{2,}/g, "-"), toKebab = (str) => normalizeSlug(str).replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), toPascal = (str) => {
|
|
1088
|
-
if (!str.includes("-") && !str.includes("_")) {
|
|
1089
|
-
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
1090
|
-
}
|
|
1091
|
-
return normalizeSlug(str).split(/[-_]/).filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()).join("");
|
|
1092
|
-
};
|
|
1093
|
-
|
|
1094
1583
|
// src/cli/scripts/telemetry.ts
|
|
1095
1584
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
1096
1585
|
import { homedir } from "os";
|
|
@@ -1114,7 +1603,7 @@ var init_telemetry = __esm(() => {
|
|
|
1114
1603
|
// src/cli/telemetryEvent.ts
|
|
1115
1604
|
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
|
|
1116
1605
|
import { arch, platform } from "os";
|
|
1117
|
-
import { dirname, join as join2, parse } from "path";
|
|
1606
|
+
import { dirname as dirname3, join as join2, parse } from "path";
|
|
1118
1607
|
var checkCandidate = (candidate) => {
|
|
1119
1608
|
if (!existsSync2(candidate)) {
|
|
1120
1609
|
return null;
|
|
@@ -1139,7 +1628,7 @@ var checkCandidate = (candidate) => {
|
|
|
1139
1628
|
if (version) {
|
|
1140
1629
|
return version;
|
|
1141
1630
|
}
|
|
1142
|
-
dir =
|
|
1631
|
+
dir = dirname3(dir);
|
|
1143
1632
|
}
|
|
1144
1633
|
return "unknown";
|
|
1145
1634
|
}, sendTelemetryEvent = (event, payload) => {
|
|
@@ -1178,18 +1667,18 @@ __export(exports_buildHMRClient, {
|
|
|
1178
1667
|
buildHMRClient: () => buildHMRClient
|
|
1179
1668
|
});
|
|
1180
1669
|
import { existsSync as existsSync3 } from "fs";
|
|
1181
|
-
import { resolve } from "path";
|
|
1670
|
+
import { resolve as resolve2 } from "path";
|
|
1182
1671
|
var {build: bunBuild } = globalThis.Bun;
|
|
1183
1672
|
var resolveHmrClientPath = () => {
|
|
1184
1673
|
const projectRoot = process.cwd();
|
|
1185
|
-
const fromSource =
|
|
1674
|
+
const fromSource = resolve2(import.meta.dir, "client/hmrClient.ts");
|
|
1186
1675
|
if (existsSync3(fromSource) && fromSource.startsWith(projectRoot)) {
|
|
1187
1676
|
return fromSource;
|
|
1188
1677
|
}
|
|
1189
|
-
const fromNodeModules =
|
|
1678
|
+
const fromNodeModules = resolve2(projectRoot, "node_modules/@absolutejs/absolute/dist/dev/client/hmrClient.ts");
|
|
1190
1679
|
if (existsSync3(fromNodeModules))
|
|
1191
1680
|
return fromNodeModules;
|
|
1192
|
-
return
|
|
1681
|
+
return resolve2(import.meta.dir, "dev/client/hmrClient.ts");
|
|
1193
1682
|
}, hmrClientPath, buildHMRClient = async () => {
|
|
1194
1683
|
const entryPoint = hmrClientPath;
|
|
1195
1684
|
const result = await bunBuild({
|
|
@@ -1325,12 +1814,11 @@ var runWithStreamingSlotRegistry = async (task) => {
|
|
|
1325
1814
|
};
|
|
1326
1815
|
|
|
1327
1816
|
// src/vue/pageHandler.ts
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1817
|
+
init_inlinePageCss();
|
|
1818
|
+
init_spaRouteCss();
|
|
1819
|
+
init_spaRouteManifest();
|
|
1331
1820
|
|
|
1332
1821
|
// src/core/islandPageContext.ts
|
|
1333
|
-
init_constants();
|
|
1334
1822
|
var BOOTSTRAP_MANIFEST_KEY = "BootstrapClient";
|
|
1335
1823
|
var ISLAND_MARKER = 'data-island="true"';
|
|
1336
1824
|
var MANIFEST_MARKER = "__ABSOLUTE_MANIFEST__";
|
|
@@ -1451,61 +1939,69 @@ var pipeStreamWithHeadInjection = (stream, markup) => {
|
|
|
1451
1939
|
var pipeStreamWithIslandMarkerDetection = (stream, markup) => {
|
|
1452
1940
|
const encoder = new TextEncoder;
|
|
1453
1941
|
const decoder = new TextDecoder;
|
|
1454
|
-
const
|
|
1455
|
-
const
|
|
1456
|
-
if (
|
|
1457
|
-
controller.enqueue(encoder.encode(
|
|
1458
|
-
return { injected, pending: "" };
|
|
1942
|
+
const headLookbehind = CLOSING_HEAD_TAG.length - 1;
|
|
1943
|
+
const enqueue = (controller, text) => {
|
|
1944
|
+
if (text.length > 0) {
|
|
1945
|
+
controller.enqueue(encoder.encode(text));
|
|
1459
1946
|
}
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
const next = `${pending.slice(0, injectAt)}${markup}${pending.slice(injectAt)}`;
|
|
1465
|
-
controller.enqueue(encoder.encode(next));
|
|
1466
|
-
return { injected: true, pending: "" };
|
|
1947
|
+
};
|
|
1948
|
+
const processHolding = (controller, held) => {
|
|
1949
|
+
if (!held.includes(ISLAND_MARKER)) {
|
|
1950
|
+
return { held, injected: false, pending: "", sawHead: true };
|
|
1467
1951
|
}
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
pending: flushSafePendingText(controller, encoder, pending, lookbehind)
|
|
1471
|
-
};
|
|
1952
|
+
enqueue(controller, `${markup}${held}`);
|
|
1953
|
+
return { held: "", injected: true, pending: "", sawHead: true };
|
|
1472
1954
|
};
|
|
1473
|
-
const
|
|
1474
|
-
const
|
|
1475
|
-
if (
|
|
1476
|
-
|
|
1955
|
+
const processHead = (controller, pending) => {
|
|
1956
|
+
const headIndex = pending.indexOf(CLOSING_HEAD_TAG);
|
|
1957
|
+
if (headIndex < 0) {
|
|
1958
|
+
return {
|
|
1959
|
+
held: "",
|
|
1960
|
+
injected: false,
|
|
1961
|
+
pending: flushSafePendingText(controller, encoder, pending, headLookbehind),
|
|
1962
|
+
sawHead: false
|
|
1963
|
+
};
|
|
1477
1964
|
}
|
|
1478
|
-
controller.
|
|
1965
|
+
enqueue(controller, pending.slice(0, headIndex));
|
|
1966
|
+
return processHolding(controller, pending.slice(headIndex));
|
|
1479
1967
|
};
|
|
1480
|
-
const
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
return
|
|
1968
|
+
const processChunk = (controller, state, chunk) => {
|
|
1969
|
+
if (state.injected) {
|
|
1970
|
+
enqueue(controller, chunk);
|
|
1971
|
+
return state;
|
|
1484
1972
|
}
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
pending: processed.pending
|
|
1490
|
-
};
|
|
1973
|
+
if (!state.sawHead) {
|
|
1974
|
+
return processHead(controller, state.pending + chunk);
|
|
1975
|
+
}
|
|
1976
|
+
return processHolding(controller, state.held + chunk);
|
|
1491
1977
|
};
|
|
1492
|
-
const
|
|
1493
|
-
const
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1978
|
+
const finishMarkerStream = (controller, state) => {
|
|
1979
|
+
const tail = decoder.decode();
|
|
1980
|
+
const remainder = state.injected ? tail : (state.sawHead ? state.held : state.pending) + tail;
|
|
1981
|
+
enqueue(controller, remainder);
|
|
1982
|
+
controller.close();
|
|
1983
|
+
};
|
|
1984
|
+
const runMarkerLoop = (controller, reader) => {
|
|
1985
|
+
const consumeNext = async (state) => {
|
|
1986
|
+
const { done, value } = await readStreamChunk(reader);
|
|
1987
|
+
if (done || !value) {
|
|
1988
|
+
return state;
|
|
1498
1989
|
}
|
|
1499
|
-
return
|
|
1990
|
+
return consumeNext(processChunk(controller, state, streamChunkToString(value, decoder)));
|
|
1500
1991
|
};
|
|
1501
|
-
return
|
|
1992
|
+
return consumeNext({
|
|
1993
|
+
held: "",
|
|
1994
|
+
injected: false,
|
|
1995
|
+
pending: "",
|
|
1996
|
+
sawHead: false
|
|
1997
|
+
});
|
|
1502
1998
|
};
|
|
1503
1999
|
return new ReadableStream({
|
|
1504
2000
|
async start(controller) {
|
|
1505
2001
|
const reader = stream.getReader();
|
|
1506
2002
|
try {
|
|
1507
|
-
const
|
|
1508
|
-
|
|
2003
|
+
const finalState = await runMarkerLoop(controller, reader);
|
|
2004
|
+
finishMarkerStream(controller, finalState);
|
|
1509
2005
|
} catch (error) {
|
|
1510
2006
|
controller.error(error);
|
|
1511
2007
|
}
|
|
@@ -1543,9 +2039,11 @@ var setCurrentIslandManifest = (manifest) => {
|
|
|
1543
2039
|
|
|
1544
2040
|
// src/vue/pageHandler.ts
|
|
1545
2041
|
init_devRouteRegistrationCallsite();
|
|
2042
|
+
init_pageResponseCache();
|
|
1546
2043
|
|
|
1547
2044
|
// src/core/responseEnhancers.ts
|
|
1548
2045
|
init_streamingSlots();
|
|
2046
|
+
init_pageResponseCache();
|
|
1549
2047
|
var toResponse = async (responseLike) => responseLike;
|
|
1550
2048
|
var cloneHeaders = (response) => {
|
|
1551
2049
|
const headers = new Headers(response.headers);
|
|
@@ -1560,392 +2058,140 @@ var enhanceHtmlResponseWithStreamingSlots = (response, {
|
|
|
1560
2058
|
policy
|
|
1561
2059
|
} = {}) => {
|
|
1562
2060
|
if (!response.body || streamingSlots.length === 0) {
|
|
1563
|
-
return response;
|
|
1564
|
-
}
|
|
1565
|
-
const body = appendStreamingSlotPatchesToStream(response.body, streamingSlots, {
|
|
1566
|
-
nonce,
|
|
1567
|
-
onError,
|
|
1568
|
-
policy,
|
|
1569
|
-
runtimePlacement,
|
|
1570
|
-
runtimePreludeScript
|
|
1571
|
-
});
|
|
1572
|
-
return new Response(body, {
|
|
1573
|
-
headers: cloneHeaders(response),
|
|
1574
|
-
status: response.status,
|
|
1575
|
-
statusText: response.statusText
|
|
1576
|
-
});
|
|
1577
|
-
};
|
|
1578
|
-
var withStreamingSlots = async (responseLike, options = {}) => enhanceHtmlResponseWithStreamingSlots(await toResponse(responseLike), options);
|
|
1579
|
-
var mergeStreamingSlots = (registered, explicit) => {
|
|
1580
|
-
const merged = new Map;
|
|
1581
|
-
for (const slot of registered)
|
|
1582
|
-
merged.set(slot.id, slot);
|
|
1583
|
-
for (const slot of explicit)
|
|
1584
|
-
merged.set(slot.id, slot);
|
|
1585
|
-
return [...merged.values()];
|
|
1586
|
-
};
|
|
1587
|
-
var withRegisteredStreamingSlots = async (renderResponse, options = {}) => {
|
|
1588
|
-
const { result, slots } = await runWithStreamingSlotRegistry(renderResponse);
|
|
1589
|
-
const explicit = options.streamingSlots ?? [];
|
|
1590
|
-
return withStreamingSlots(result, {
|
|
1591
|
-
...options,
|
|
1592
|
-
streamingSlots: mergeStreamingSlots(slots, explicit)
|
|
1593
|
-
});
|
|
1594
|
-
};
|
|
1595
|
-
|
|
1596
|
-
// src/core/streamingSlotWarningScope.ts
|
|
1597
|
-
init_logger();
|
|
1598
|
-
import { AsyncLocalStorage as AsyncLocalStorage2 } from "async_hooks";
|
|
1599
|
-
var STREAMING_SLOT_WARNING_STORAGE_KEY2 = Symbol.for("absolutejs.streamingSlotWarningAsyncLocalStorage");
|
|
1600
|
-
var isObjectRecord4 = (value) => Boolean(value) && typeof value === "object";
|
|
1601
|
-
var isAsyncLocalStorage3 = (value) => isObjectRecord4(value) && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";
|
|
1602
|
-
var getWarningStorage = () => {
|
|
1603
|
-
const value = Reflect.get(globalThis, STREAMING_SLOT_WARNING_STORAGE_KEY2);
|
|
1604
|
-
if (value === null || typeof value === "undefined") {
|
|
1605
|
-
return;
|
|
1606
|
-
}
|
|
1607
|
-
return isAsyncLocalStorage3(value) ? value : undefined;
|
|
1608
|
-
};
|
|
1609
|
-
var ensureWarningStorage = () => {
|
|
1610
|
-
const existing = getWarningStorage();
|
|
1611
|
-
if (existing) {
|
|
1612
|
-
return existing;
|
|
1613
|
-
}
|
|
1614
|
-
const storage = new AsyncLocalStorage2;
|
|
1615
|
-
Reflect.set(globalThis, STREAMING_SLOT_WARNING_STORAGE_KEY2, storage);
|
|
1616
|
-
return storage;
|
|
1617
|
-
};
|
|
1618
|
-
var normalizeCallsitePath2 = (value) => value.replace(`${process.cwd()}/`, "").replace(process.cwd(), "").replace(/^\.\/+/, "");
|
|
1619
|
-
var formatWarningCallsite = (callsite) => {
|
|
1620
|
-
const match = callsite.match(/^(.*?)(:\d+:\d+)$/);
|
|
1621
|
-
if (!match) {
|
|
1622
|
-
return `\x1B[36m${callsite}\x1B[0m`;
|
|
1623
|
-
}
|
|
1624
|
-
return `\x1B[36m${match[1]}\x1B[33m${match[2]}\x1B[0m`;
|
|
1625
|
-
};
|
|
1626
|
-
var shouldIgnoreWarningFrame = (frame) => frame.includes("/node_modules/") || frame.includes("/dist/") || frame.includes("/src/react/pageHandler.") || frame.includes("/src/vue/pageHandler.") || frame.includes("/src/svelte/pageHandler.") || frame.includes("/src/angular/pageHandler.") || frame.includes("/src/core/streamingSlotWarningScope.");
|
|
1627
|
-
var getWarningLocation = (frame) => frame.match(/\((\/[^)]+:\d+:\d+)\)$/)?.[1] ?? frame.match(/at (\/[^ ]+:\d+:\d+)$/)?.[1];
|
|
1628
|
-
var extractCallsiteFromStack = (stack) => {
|
|
1629
|
-
const location = stack.split(`
|
|
1630
|
-
`).slice(1).map((line) => line.trim()).filter((frame) => !shouldIgnoreWarningFrame(frame)).map((frame) => getWarningLocation(frame)).find((frameLocation) => frameLocation !== undefined);
|
|
1631
|
-
return location ? normalizeCallsitePath2(location) : undefined;
|
|
1632
|
-
};
|
|
1633
|
-
var buildMissingCollectorWarning = (primitiveName, handlerCallsite) => `${primitiveName} rendered during SSR without streaming slot collection enabled. Add { collectStreamingSlots: true } to this page handler to enable out-of-order streaming for this route.${handlerCallsite ? ` Update ${formatWarningCallsite(handlerCallsite)}.` : ""}`;
|
|
1634
|
-
setStreamingSlotWarningController({
|
|
1635
|
-
maybeWarn: (primitiveName) => {
|
|
1636
|
-
const store = getWarningStorage()?.getStore();
|
|
1637
|
-
if (!store || store.hasWarned) {
|
|
1638
|
-
return;
|
|
1639
|
-
}
|
|
1640
|
-
store.hasWarned = true;
|
|
1641
|
-
logWarn(buildMissingCollectorWarning(primitiveName, store.handlerCallsite));
|
|
1642
|
-
}
|
|
1643
|
-
});
|
|
1644
|
-
var captureStreamingSlotWarningCallsite = () => {
|
|
1645
|
-
if (false) {}
|
|
1646
|
-
const { stack } = new Error;
|
|
1647
|
-
if (!stack) {
|
|
1648
|
-
return;
|
|
1649
|
-
}
|
|
1650
|
-
return extractCallsiteFromStack(stack);
|
|
1651
|
-
};
|
|
1652
|
-
var runWithStreamingSlotWarningScope = (task, metadata) => ensureWarningStorage().run({ handlerCallsite: metadata?.handlerCallsite, hasWarned: false }, task);
|
|
1653
|
-
// src/utils/resolveConvention.ts
|
|
1654
|
-
import { basename } from "path";
|
|
1655
|
-
var CONVENTIONS_KEY = "__absoluteConventions";
|
|
1656
|
-
var isConventionsMap = (value) => Boolean(value) && typeof value === "object";
|
|
1657
|
-
var getMap = () => {
|
|
1658
|
-
const value = Reflect.get(globalThis, CONVENTIONS_KEY);
|
|
1659
|
-
if (isConventionsMap(value))
|
|
1660
|
-
return value;
|
|
1661
|
-
const empty = {};
|
|
1662
|
-
return empty;
|
|
1663
|
-
};
|
|
1664
|
-
var derivePageName = (pagePath) => {
|
|
1665
|
-
const base = basename(pagePath);
|
|
1666
|
-
const dotIndex = base.indexOf(".");
|
|
1667
|
-
const name = dotIndex > 0 ? base.slice(0, dotIndex) : base;
|
|
1668
|
-
return toPascal(name);
|
|
1669
|
-
};
|
|
1670
|
-
var normalizeConventionPageName = (name) => toPascal(name).replace(/\d+$/, "");
|
|
1671
|
-
var resolveErrorConventionPath = (framework, pageName) => {
|
|
1672
|
-
const conventions = getMap()[framework];
|
|
1673
|
-
if (!conventions)
|
|
1674
|
-
return;
|
|
1675
|
-
const exact = conventions.pages?.[pageName]?.error;
|
|
1676
|
-
if (exact)
|
|
1677
|
-
return exact;
|
|
1678
|
-
const normalizedPageName = normalizeConventionPageName(pageName);
|
|
1679
|
-
for (const [candidate, page] of Object.entries(conventions.pages ?? {})) {
|
|
1680
|
-
if (normalizeConventionPageName(candidate) === normalizedPageName) {
|
|
1681
|
-
return page.error ?? conventions.defaults?.error;
|
|
1682
|
-
}
|
|
1683
|
-
}
|
|
1684
|
-
return conventions.defaults?.error;
|
|
1685
|
-
};
|
|
1686
|
-
var resolveNotFoundConventionPath = (framework) => getMap()[framework]?.defaults?.notFound;
|
|
1687
|
-
var hasErrorConvention = (framework) => {
|
|
1688
|
-
const conventions = getMap()[framework];
|
|
1689
|
-
if (!conventions)
|
|
1690
|
-
return false;
|
|
1691
|
-
if (conventions.defaults?.error)
|
|
1692
|
-
return true;
|
|
1693
|
-
return Object.values(conventions.pages ?? {}).some((page) => Boolean(page.error));
|
|
1694
|
-
};
|
|
1695
|
-
var setConventions = (map) => {
|
|
1696
|
-
Reflect.set(globalThis, CONVENTIONS_KEY, map);
|
|
1697
|
-
};
|
|
1698
|
-
var isDev = () => true;
|
|
1699
|
-
var buildErrorProps = (error) => {
|
|
1700
|
-
if (error instanceof Error) {
|
|
1701
|
-
return {
|
|
1702
|
-
name: error.name,
|
|
1703
|
-
message: error.message,
|
|
1704
|
-
...isDev() && error.stack ? { stack: error.stack } : {}
|
|
1705
|
-
};
|
|
1706
|
-
}
|
|
1707
|
-
return { name: "Error", message: String(error) };
|
|
1708
|
-
};
|
|
1709
|
-
var renderReactError = async (conventionPath, errorProps) => {
|
|
1710
|
-
const { createElement } = await import("react");
|
|
1711
|
-
const { renderToReadableStream } = await import("react-dom/server");
|
|
1712
|
-
const mod = await import(conventionPath);
|
|
1713
|
-
const ErrorComponent = mod.default;
|
|
1714
|
-
if (typeof ErrorComponent !== "function")
|
|
1715
|
-
return null;
|
|
1716
|
-
const element = createElement(ErrorComponent, errorProps);
|
|
1717
|
-
const stream = await renderToReadableStream(element);
|
|
1718
|
-
return new Response(stream, {
|
|
1719
|
-
headers: { "Content-Type": "text/html" },
|
|
1720
|
-
status: 500
|
|
1721
|
-
});
|
|
1722
|
-
};
|
|
1723
|
-
var renderSvelteError = async (conventionPath, errorProps) => {
|
|
1724
|
-
const { render } = await import("svelte/server");
|
|
1725
|
-
const mod = await import(conventionPath);
|
|
1726
|
-
const ErrorComponent = mod.default;
|
|
1727
|
-
if (!ErrorComponent)
|
|
1728
|
-
return null;
|
|
1729
|
-
const { head, body } = render(ErrorComponent, {
|
|
1730
|
-
props: errorProps
|
|
1731
|
-
});
|
|
1732
|
-
const html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;
|
|
1733
|
-
return new Response(html, {
|
|
1734
|
-
headers: { "Content-Type": "text/html" },
|
|
1735
|
-
status: 500
|
|
1736
|
-
});
|
|
1737
|
-
};
|
|
1738
|
-
var unescapeVueStyles = (ssrBody) => {
|
|
1739
|
-
let styles = "";
|
|
1740
|
-
const body = ssrBody.replace(/<style>([\s\S]*?)<\/style>/g, (_, css) => {
|
|
1741
|
-
styles += `<style>${css.replace(/"/g, '"').replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">")}</style>`;
|
|
1742
|
-
return "";
|
|
1743
|
-
});
|
|
1744
|
-
return { body, styles };
|
|
1745
|
-
};
|
|
1746
|
-
var renderVueError = async (conventionPath, errorProps) => {
|
|
1747
|
-
const { createSSRApp, h } = await import("vue");
|
|
1748
|
-
const { renderToString } = await import("vue/server-renderer");
|
|
1749
|
-
const mod = await import(conventionPath);
|
|
1750
|
-
const ErrorComponent = mod.default;
|
|
1751
|
-
if (!ErrorComponent)
|
|
1752
|
-
return null;
|
|
1753
|
-
const app = createSSRApp({
|
|
1754
|
-
render: () => h(ErrorComponent, errorProps)
|
|
2061
|
+
return response;
|
|
2062
|
+
}
|
|
2063
|
+
const body = appendStreamingSlotPatchesToStream(response.body, streamingSlots, {
|
|
2064
|
+
nonce,
|
|
2065
|
+
onError,
|
|
2066
|
+
policy,
|
|
2067
|
+
runtimePlacement,
|
|
2068
|
+
runtimePreludeScript
|
|
1755
2069
|
});
|
|
1756
|
-
const
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
2070
|
+
const headers = cloneHeaders(response);
|
|
2071
|
+
headers.set(STREAMING_PAGE_HEADER, "1");
|
|
2072
|
+
return new Response(body, {
|
|
2073
|
+
headers,
|
|
2074
|
+
status: response.status,
|
|
2075
|
+
statusText: response.statusText
|
|
1762
2076
|
});
|
|
1763
2077
|
};
|
|
1764
|
-
var
|
|
1765
|
-
|
|
1766
|
-
const
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
const
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
status: 500
|
|
1773
|
-
});
|
|
2078
|
+
var withStreamingSlots = async (responseLike, options = {}) => enhanceHtmlResponseWithStreamingSlots(await toResponse(responseLike), options);
|
|
2079
|
+
var mergeStreamingSlots = (registered, explicit) => {
|
|
2080
|
+
const merged = new Map;
|
|
2081
|
+
for (const slot of registered)
|
|
2082
|
+
merged.set(slot.id, slot);
|
|
2083
|
+
for (const slot of explicit)
|
|
2084
|
+
merged.set(slot.id, slot);
|
|
2085
|
+
return [...merged.values()];
|
|
1774
2086
|
};
|
|
1775
|
-
var
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
headers: { "Content-Type": "text/html" },
|
|
1782
|
-
status: 500
|
|
2087
|
+
var withRegisteredStreamingSlots = async (renderResponse, options = {}) => {
|
|
2088
|
+
const { result, slots } = await runWithStreamingSlotRegistry(renderResponse);
|
|
2089
|
+
const explicit = options.streamingSlots ?? [];
|
|
2090
|
+
return withStreamingSlots(result, {
|
|
2091
|
+
...options,
|
|
2092
|
+
streamingSlots: mergeStreamingSlots(slots, explicit)
|
|
1783
2093
|
});
|
|
1784
2094
|
};
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
2095
|
+
|
|
2096
|
+
// src/core/streamingSlotWarningScope.ts
|
|
2097
|
+
init_logger();
|
|
2098
|
+
import { AsyncLocalStorage as AsyncLocalStorage2 } from "async_hooks";
|
|
2099
|
+
var STREAMING_SLOT_WARNING_STORAGE_KEY2 = Symbol.for("absolutejs.streamingSlotWarningAsyncLocalStorage");
|
|
2100
|
+
var isObjectRecord4 = (value) => Boolean(value) && typeof value === "object";
|
|
2101
|
+
var isAsyncLocalStorage3 = (value) => isObjectRecord4(value) && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";
|
|
2102
|
+
var getWarningStorage = () => {
|
|
2103
|
+
const value = Reflect.get(globalThis, STREAMING_SLOT_WARNING_STORAGE_KEY2);
|
|
2104
|
+
if (value === null || typeof value === "undefined") {
|
|
1789
2105
|
return;
|
|
1790
2106
|
}
|
|
1791
|
-
|
|
1792
|
-
};
|
|
1793
|
-
var renderEmberError = async () => null;
|
|
1794
|
-
var renderEmberNotFound = async () => null;
|
|
1795
|
-
var ERROR_RENDERERS = {
|
|
1796
|
-
angular: renderAngularError,
|
|
1797
|
-
ember: renderEmberError,
|
|
1798
|
-
html: renderHtmlError,
|
|
1799
|
-
react: renderReactError,
|
|
1800
|
-
svelte: renderSvelteError,
|
|
1801
|
-
vue: renderVueError
|
|
2107
|
+
return isAsyncLocalStorage3(value) ? value : undefined;
|
|
1802
2108
|
};
|
|
1803
|
-
var
|
|
1804
|
-
|
|
1805
|
-
if (
|
|
1806
|
-
|
|
1807
|
-
const candidate = match[1];
|
|
1808
|
-
if (!candidate)
|
|
1809
|
-
continue;
|
|
1810
|
-
conventionPath = resolveErrorConventionPath(framework, candidate);
|
|
1811
|
-
if (conventionPath)
|
|
1812
|
-
break;
|
|
1813
|
-
}
|
|
1814
|
-
}
|
|
1815
|
-
if (!conventionPath)
|
|
1816
|
-
return null;
|
|
1817
|
-
const renderer = ERROR_RENDERERS[framework];
|
|
1818
|
-
if (!renderer)
|
|
1819
|
-
return null;
|
|
1820
|
-
try {
|
|
1821
|
-
return await renderer(conventionPath, errorProps);
|
|
1822
|
-
} catch (renderError) {
|
|
1823
|
-
logConventionRenderError(framework, "error", renderError);
|
|
2109
|
+
var ensureWarningStorage = () => {
|
|
2110
|
+
const existing = getWarningStorage();
|
|
2111
|
+
if (existing) {
|
|
2112
|
+
return existing;
|
|
1824
2113
|
}
|
|
1825
|
-
|
|
2114
|
+
const storage = new AsyncLocalStorage2;
|
|
2115
|
+
Reflect.set(globalThis, STREAMING_SLOT_WARNING_STORAGE_KEY2, storage);
|
|
2116
|
+
return storage;
|
|
1826
2117
|
};
|
|
1827
|
-
var
|
|
1828
|
-
|
|
1829
|
-
const
|
|
1830
|
-
if (
|
|
1831
|
-
return
|
|
1832
|
-
if (framework !== "html") {
|
|
1833
|
-
const htmlResponse = await tryFrameworkErrorConvention("html", pageName, errorProps, error);
|
|
1834
|
-
if (htmlResponse)
|
|
1835
|
-
return htmlResponse;
|
|
2118
|
+
var normalizeCallsitePath2 = (value) => value.replace(`${process.cwd()}/`, "").replace(process.cwd(), "").replace(/^\.\/+/, "");
|
|
2119
|
+
var formatWarningCallsite = (callsite) => {
|
|
2120
|
+
const match = callsite.match(/^(.*?)(:\d+:\d+)$/);
|
|
2121
|
+
if (!match) {
|
|
2122
|
+
return `\x1B[36m${callsite}\x1B[0m`;
|
|
1836
2123
|
}
|
|
1837
|
-
return
|
|
1838
|
-
};
|
|
1839
|
-
var renderReactNotFound = async (conventionPath) => {
|
|
1840
|
-
const { createElement } = await import("react");
|
|
1841
|
-
const { renderToReadableStream } = await import("react-dom/server");
|
|
1842
|
-
const mod = await import(conventionPath);
|
|
1843
|
-
const NotFoundComponent = mod.default;
|
|
1844
|
-
if (typeof NotFoundComponent !== "function")
|
|
1845
|
-
return null;
|
|
1846
|
-
const element = createElement(NotFoundComponent);
|
|
1847
|
-
const stream = await renderToReadableStream(element);
|
|
1848
|
-
return new Response(stream, {
|
|
1849
|
-
headers: { "Content-Type": "text/html" },
|
|
1850
|
-
status: 404
|
|
1851
|
-
});
|
|
1852
|
-
};
|
|
1853
|
-
var renderSvelteNotFound = async (conventionPath) => {
|
|
1854
|
-
const { render } = await import("svelte/server");
|
|
1855
|
-
const mod = await import(conventionPath);
|
|
1856
|
-
const NotFoundComponent = mod.default;
|
|
1857
|
-
if (!NotFoundComponent)
|
|
1858
|
-
return null;
|
|
1859
|
-
const { head, body } = render(NotFoundComponent);
|
|
1860
|
-
const html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;
|
|
1861
|
-
return new Response(html, {
|
|
1862
|
-
headers: { "Content-Type": "text/html" },
|
|
1863
|
-
status: 404
|
|
1864
|
-
});
|
|
1865
|
-
};
|
|
1866
|
-
var renderVueNotFound = async (conventionPath) => {
|
|
1867
|
-
const { createSSRApp, h } = await import("vue");
|
|
1868
|
-
const { renderToString } = await import("vue/server-renderer");
|
|
1869
|
-
const mod = await import(conventionPath);
|
|
1870
|
-
const NotFoundComponent = mod.default;
|
|
1871
|
-
if (!NotFoundComponent)
|
|
1872
|
-
return null;
|
|
1873
|
-
const app = createSSRApp({
|
|
1874
|
-
render: () => h(NotFoundComponent)
|
|
1875
|
-
});
|
|
1876
|
-
const rawBody = await renderToString(app);
|
|
1877
|
-
const { styles, body } = unescapeVueStyles(rawBody);
|
|
1878
|
-
const html = `<!DOCTYPE html><html><head>${styles}</head><body><div id="root">${body}</div></body></html>`;
|
|
1879
|
-
return new Response(html, {
|
|
1880
|
-
headers: { "Content-Type": "text/html" },
|
|
1881
|
-
status: 404
|
|
1882
|
-
});
|
|
1883
|
-
};
|
|
1884
|
-
var renderAngularNotFound = async (conventionPath) => {
|
|
1885
|
-
const mod = await import(conventionPath);
|
|
1886
|
-
const renderFn = mod.default;
|
|
1887
|
-
if (typeof renderFn !== "function")
|
|
1888
|
-
return null;
|
|
1889
|
-
const html = renderFn();
|
|
1890
|
-
return new Response(html, {
|
|
1891
|
-
headers: { "Content-Type": "text/html" },
|
|
1892
|
-
status: 404
|
|
1893
|
-
});
|
|
2124
|
+
return `\x1B[36m${match[1]}\x1B[33m${match[2]}\x1B[0m`;
|
|
1894
2125
|
};
|
|
1895
|
-
var
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
2126
|
+
var shouldIgnoreWarningFrame = (frame) => frame.includes("/node_modules/") || frame.includes("/dist/") || frame.includes("/src/react/pageHandler.") || frame.includes("/src/vue/pageHandler.") || frame.includes("/src/svelte/pageHandler.") || frame.includes("/src/angular/pageHandler.") || frame.includes("/src/core/streamingSlotWarningScope.");
|
|
2127
|
+
var getWarningLocation = (frame) => frame.match(/\((\/[^)]+:\d+:\d+)\)$/)?.[1] ?? frame.match(/at (\/[^ ]+:\d+:\d+)$/)?.[1];
|
|
2128
|
+
var extractCallsiteFromStack = (stack) => {
|
|
2129
|
+
const location = stack.split(`
|
|
2130
|
+
`).slice(1).map((line) => line.trim()).filter((frame) => !shouldIgnoreWarningFrame(frame)).map((frame) => getWarningLocation(frame)).find((frameLocation) => frameLocation !== undefined);
|
|
2131
|
+
return location ? normalizeCallsitePath2(location) : undefined;
|
|
1901
2132
|
};
|
|
1902
|
-
var
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
2133
|
+
var buildMissingCollectorWarning = (primitiveName, handlerCallsite) => `${primitiveName} rendered during SSR without streaming slot collection enabled. Add { collectStreamingSlots: true } to this page handler to enable out-of-order streaming for this route.${handlerCallsite ? ` Update ${formatWarningCallsite(handlerCallsite)}.` : ""}`;
|
|
2134
|
+
setStreamingSlotWarningController({
|
|
2135
|
+
maybeWarn: (primitiveName) => {
|
|
2136
|
+
const store = getWarningStorage()?.getStore();
|
|
2137
|
+
if (!store || store.hasWarned) {
|
|
2138
|
+
return;
|
|
2139
|
+
}
|
|
2140
|
+
store.hasWarned = true;
|
|
2141
|
+
logWarn(buildMissingCollectorWarning(primitiveName, store.handlerCallsite));
|
|
2142
|
+
}
|
|
2143
|
+
});
|
|
2144
|
+
var captureStreamingSlotWarningCallsite = () => {
|
|
2145
|
+
if (false) {}
|
|
2146
|
+
const { stack } = new Error;
|
|
2147
|
+
if (!stack) {
|
|
2148
|
+
return;
|
|
2149
|
+
}
|
|
2150
|
+
return extractCallsiteFromStack(stack);
|
|
1909
2151
|
};
|
|
1910
|
-
var
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
2152
|
+
var runWithStreamingSlotWarningScope = (task, metadata) => ensureWarningStorage().run({ handlerCallsite: metadata?.handlerCallsite, hasWarned: false }, task);
|
|
2153
|
+
|
|
2154
|
+
// src/vue/pageHandler.ts
|
|
2155
|
+
init_resolveConvention();
|
|
2156
|
+
|
|
2157
|
+
// src/vue/resolveGeneratedVueModulePath.ts
|
|
2158
|
+
init_constants();
|
|
2159
|
+
import { access, readdir, stat } from "fs/promises";
|
|
2160
|
+
import { basename as basename3, dirname as dirname2 } from "path";
|
|
2161
|
+
var canAccess = async (path) => {
|
|
1917
2162
|
try {
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
2163
|
+
await access(path);
|
|
2164
|
+
return true;
|
|
2165
|
+
} catch {
|
|
2166
|
+
return false;
|
|
1921
2167
|
}
|
|
1922
|
-
return null;
|
|
1923
2168
|
};
|
|
1924
|
-
var
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
"
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
const
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
return renderNext(remaining);
|
|
1945
|
-
};
|
|
1946
|
-
return renderNext(NOT_FOUND_PRIORITY);
|
|
2169
|
+
var resolveGeneratedVueModulePath = async (pagePath) => {
|
|
2170
|
+
if (await canAccess(pagePath))
|
|
2171
|
+
return pagePath;
|
|
2172
|
+
const pageDirectory = dirname2(pagePath);
|
|
2173
|
+
const expectedPrefix = `${basename3(pagePath, ".js").split(".")[0]}.`;
|
|
2174
|
+
try {
|
|
2175
|
+
const pageEntries = await readdir(pageDirectory, {
|
|
2176
|
+
withFileTypes: true
|
|
2177
|
+
});
|
|
2178
|
+
const matchingEntries = pageEntries.filter((entry) => entry.isFile() && entry.name.endsWith(".js") && (entry.name === `${expectedPrefix.slice(0, EXCLUDE_LAST_OFFSET)}.js` || entry.name.startsWith(expectedPrefix)));
|
|
2179
|
+
const candidates = await Promise.all(matchingEntries.map(async (entry) => {
|
|
2180
|
+
const path = `${pageDirectory}/${entry.name}`;
|
|
2181
|
+
const metadata = await stat(path);
|
|
2182
|
+
return { modifiedAt: metadata.mtimeMs, path };
|
|
2183
|
+
}));
|
|
2184
|
+
candidates.sort((left, right) => right.modifiedAt - left.modifiedAt || left.path.localeCompare(right.path));
|
|
2185
|
+
return candidates[0]?.path ?? pagePath;
|
|
2186
|
+
} catch {
|
|
2187
|
+
return pagePath;
|
|
2188
|
+
}
|
|
1947
2189
|
};
|
|
1948
2190
|
|
|
2191
|
+
// src/vue/teleports.ts
|
|
2192
|
+
var ABSOLUTE_TELEPORT_TARGET_ID = "absolute-teleports";
|
|
2193
|
+
var ABSOLUTE_TELEPORT_TARGET = `#${ABSOLUTE_TELEPORT_TARGET_ID}`;
|
|
2194
|
+
|
|
1949
2195
|
// src/vue/pageHandler.ts
|
|
1950
2196
|
var isRecord2 = (value) => typeof value === "object" && value !== null;
|
|
1951
2197
|
var isGenericVueComponent = (value) => typeof value === "function" || isRecord2(value);
|
|
@@ -1955,29 +2201,15 @@ var readHasIslands = (value) => {
|
|
|
1955
2201
|
const hasIslands = value["__ABSOLUTE_PAGE_HAS_ISLANDS__"];
|
|
1956
2202
|
return typeof hasIslands === "boolean" ? hasIslands : false;
|
|
1957
2203
|
};
|
|
2204
|
+
var isVueSetupApp = (value) => typeof value === "function";
|
|
1958
2205
|
var readSetupAppHook = (value) => {
|
|
1959
2206
|
if (!isRecord2(value))
|
|
1960
2207
|
return null;
|
|
1961
|
-
const setupApp = value
|
|
1962
|
-
return
|
|
2208
|
+
const { setupApp } = value;
|
|
2209
|
+
return isVueSetupApp(setupApp) ? setupApp : null;
|
|
1963
2210
|
};
|
|
2211
|
+
var readHasSpaRoutes = (value) => isRecord2(value) && Array.isArray(value["routes"]);
|
|
1964
2212
|
var readDefaultExport = (value) => isRecord2(value) ? value.default : undefined;
|
|
1965
|
-
var resolveCurrentGeneratedVueModulePath = async (pagePath) => {
|
|
1966
|
-
const pageDirectory = dirname2(pagePath);
|
|
1967
|
-
const expectedPrefix = `${basename2(pagePath, ".js").split(".")[0]}.`;
|
|
1968
|
-
try {
|
|
1969
|
-
const pageEntries = await readdir(pageDirectory, {
|
|
1970
|
-
withFileTypes: true
|
|
1971
|
-
});
|
|
1972
|
-
const matchingEntry = pageEntries.find((entry) => entry.isFile() && entry.name.endsWith(".js") && (entry.name === `${expectedPrefix.slice(0, EXCLUDE_LAST_OFFSET)}.js` || entry.name.startsWith(expectedPrefix)));
|
|
1973
|
-
if (!matchingEntry) {
|
|
1974
|
-
return pagePath;
|
|
1975
|
-
}
|
|
1976
|
-
return `${pageDirectory}/${matchingEntry.name}`;
|
|
1977
|
-
} catch {
|
|
1978
|
-
return pagePath;
|
|
1979
|
-
}
|
|
1980
|
-
};
|
|
1981
2213
|
var resolveRequestRenderUrl = (request) => {
|
|
1982
2214
|
if (!request)
|
|
1983
2215
|
return "/";
|
|
@@ -1994,40 +2226,53 @@ var primeVueStream = async (stream) => {
|
|
|
1994
2226
|
return { firstChunk, reader };
|
|
1995
2227
|
};
|
|
1996
2228
|
var cachedSsrOnlyHmrShim = null;
|
|
2229
|
+
var buildSsrOnlyHmrShim = async () => {
|
|
2230
|
+
const { buildHMRClient: buildHMRClient2 } = await Promise.resolve().then(() => (init_buildHMRClient(), exports_buildHMRClient));
|
|
2231
|
+
const bundle = await buildHMRClient2();
|
|
2232
|
+
return `<script>window.__HMR_FRAMEWORK__="vue";</script><script data-hmr-client>${bundle}</script>`;
|
|
2233
|
+
};
|
|
1997
2234
|
var getSsrOnlyHmrShim = () => {
|
|
1998
2235
|
if (cachedSsrOnlyHmrShim)
|
|
1999
2236
|
return cachedSsrOnlyHmrShim;
|
|
2000
|
-
cachedSsrOnlyHmrShim = (
|
|
2001
|
-
const { buildHMRClient: buildHMRClient2 } = await Promise.resolve().then(() => (init_buildHMRClient(), exports_buildHMRClient));
|
|
2002
|
-
const bundle = await buildHMRClient2();
|
|
2003
|
-
return `<script>window.__HMR_FRAMEWORK__="vue";</script><script data-hmr-client>${bundle}</script>`;
|
|
2004
|
-
})();
|
|
2237
|
+
cachedSsrOnlyHmrShim = buildSsrOnlyHmrShim();
|
|
2005
2238
|
return cachedSsrOnlyHmrShim;
|
|
2006
2239
|
};
|
|
2007
2240
|
var handleVuePageRequest = async (input) => {
|
|
2008
2241
|
const passedPageComponent = input.Page;
|
|
2009
|
-
const
|
|
2242
|
+
const userHeadTag = input.headTag ?? "<head></head>";
|
|
2010
2243
|
const resolvedOptions = input;
|
|
2011
2244
|
const resolvedPagePath = input.pagePath;
|
|
2245
|
+
const [siblingCss, spaChildCss] = await Promise.all([
|
|
2246
|
+
readSiblingCss(resolvedPagePath),
|
|
2247
|
+
resolveSpaChildCss(resolvedPagePath, input.request?.url)
|
|
2248
|
+
]);
|
|
2249
|
+
const resolvedHeadTag = injectInlineCss(injectInlineCss(userHeadTag, siblingCss), spaChildCss);
|
|
2012
2250
|
const maybeProps = input.props;
|
|
2013
2251
|
const clientMode = input.client ?? "auto";
|
|
2014
2252
|
const resolvedIndexPath = input.indexPath;
|
|
2253
|
+
if (clientMode === "auto" && resolvedIndexPath === "") {
|
|
2254
|
+
throw new Error(`Asset "${derivePageName(resolvedPagePath)}Index" not found in manifest.`);
|
|
2255
|
+
}
|
|
2015
2256
|
if (clientMode === "auto" && !resolvedIndexPath) {
|
|
2016
2257
|
throw new Error('handleVuePageRequest: `indexPath` is required when `client` is `"auto"` (the default). Pass `client: "none"` to ship a SSR-only page with no client bundle.');
|
|
2017
2258
|
}
|
|
2018
2259
|
try {
|
|
2260
|
+
const spaNotFound = await renderSpaNotFound("vue", derivePageName(resolvedPagePath), input.request);
|
|
2261
|
+
if (spaNotFound)
|
|
2262
|
+
return withPageCacheHeaders(spaNotFound, input.request);
|
|
2019
2263
|
const handlerCallsite = resolvedOptions?.collectStreamingSlots === true ? undefined : getCurrentRouteRegistrationCallsite() ?? captureStreamingSlotWarningCallsite();
|
|
2020
2264
|
const renderPageResponse = async () => {
|
|
2021
2265
|
const resolvePageComponent = async () => {
|
|
2022
2266
|
if (isGenericVueComponent(passedPageComponent)) {
|
|
2267
|
+
const setupApp = null;
|
|
2023
2268
|
return {
|
|
2024
2269
|
component: passedPageComponent,
|
|
2025
2270
|
hasIslands: readHasIslands(passedPageComponent),
|
|
2026
|
-
|
|
2027
|
-
setupApp
|
|
2271
|
+
hasSpaRoutes: false,
|
|
2272
|
+
setupApp
|
|
2028
2273
|
};
|
|
2029
2274
|
}
|
|
2030
|
-
const generatedPagePath = await
|
|
2275
|
+
const generatedPagePath = await resolveGeneratedVueModulePath(resolvedPagePath);
|
|
2031
2276
|
const importedPageModule = await import(generatedPagePath);
|
|
2032
2277
|
const importedPageComponent = readDefaultExport(importedPageModule) ?? importedPageModule;
|
|
2033
2278
|
if (!isGenericVueComponent(importedPageComponent)) {
|
|
@@ -2036,28 +2281,31 @@ var handleVuePageRequest = async (input) => {
|
|
|
2036
2281
|
return {
|
|
2037
2282
|
component: importedPageComponent,
|
|
2038
2283
|
hasIslands: readHasIslands(importedPageModule),
|
|
2284
|
+
hasSpaRoutes: readHasSpaRoutes(importedPageModule),
|
|
2039
2285
|
setupApp: readSetupAppHook(importedPageModule)
|
|
2040
2286
|
};
|
|
2041
2287
|
};
|
|
2042
2288
|
const resolvedPage = await resolvePageComponent();
|
|
2043
|
-
const { createSSRApp
|
|
2044
|
-
const { renderToWebStream } = await import("vue/server-renderer");
|
|
2045
|
-
const app = createSSRApp(
|
|
2046
|
-
render: () => h(resolvedPage.component, maybeProps ?? null)
|
|
2047
|
-
});
|
|
2289
|
+
const { createSSRApp } = await import("vue");
|
|
2290
|
+
const { renderToString, renderToWebStream } = await import("vue/server-renderer");
|
|
2291
|
+
const app = createSSRApp(resolvedPage.component, maybeProps ?? null);
|
|
2048
2292
|
let pendingRedirect = null;
|
|
2293
|
+
let pendingNotFound = false;
|
|
2049
2294
|
if (resolvedPage.setupApp) {
|
|
2050
2295
|
const url = resolveRequestRenderUrl(input.request);
|
|
2051
2296
|
await resolvedPage.setupApp(app, {
|
|
2052
2297
|
isServer: true,
|
|
2053
2298
|
router: null,
|
|
2299
|
+
url,
|
|
2300
|
+
setNotFound: () => {
|
|
2301
|
+
pendingNotFound = true;
|
|
2302
|
+
},
|
|
2054
2303
|
setRedirect: (location, status) => {
|
|
2055
2304
|
pendingRedirect = {
|
|
2056
2305
|
location,
|
|
2057
2306
|
status: status ?? 302
|
|
2058
2307
|
};
|
|
2059
|
-
}
|
|
2060
|
-
url
|
|
2308
|
+
}
|
|
2061
2309
|
});
|
|
2062
2310
|
}
|
|
2063
2311
|
if (pendingRedirect !== null) {
|
|
@@ -2067,11 +2315,33 @@ var handleVuePageRequest = async (input) => {
|
|
|
2067
2315
|
status: redirect.status
|
|
2068
2316
|
});
|
|
2069
2317
|
}
|
|
2070
|
-
|
|
2071
|
-
|
|
2318
|
+
if (pendingNotFound) {
|
|
2319
|
+
return await renderFirstNotFound() ?? new Response("Not found", {
|
|
2320
|
+
headers: { "Content-Type": "text/plain" },
|
|
2321
|
+
status: 404
|
|
2322
|
+
});
|
|
2323
|
+
}
|
|
2324
|
+
const ssrContext = {};
|
|
2072
2325
|
const head = `<!DOCTYPE html><html>${resolvedHeadTag}<body><div id="root">`;
|
|
2073
2326
|
const ssrOnlyHmrShim = clientMode === "none" ? await getSsrOnlyHmrShim() : "";
|
|
2074
|
-
const
|
|
2327
|
+
const buildTail = () => {
|
|
2328
|
+
const teleports = ssrContext.teleports?.[ABSOLUTE_TELEPORT_TARGET] ?? "";
|
|
2329
|
+
const teleportHost = `<div id="${ABSOLUTE_TELEPORT_TARGET_ID}">${teleports}</div>`;
|
|
2330
|
+
return clientMode === "none" ? `</div>${teleportHost}${ssrOnlyHmrShim}</body></html>` : `</div>${teleportHost}<script>window.__INITIAL_PROPS__=${JSON.stringify(maybeProps ?? {})}</script><script type="module" src="${resolvedIndexPath}"></script></body></html>`;
|
|
2331
|
+
};
|
|
2332
|
+
if (resolvedPage.hasSpaRoutes && clientMode === "auto") {
|
|
2333
|
+
return new Response(`${head}${buildTail()}`, {
|
|
2334
|
+
headers: { "Content-Type": "text/html" }
|
|
2335
|
+
});
|
|
2336
|
+
}
|
|
2337
|
+
if (resolvedOptions?.collectStreamingSlots !== true) {
|
|
2338
|
+
const body = await renderToString(app, ssrContext);
|
|
2339
|
+
return new Response(`${head}${body}${buildTail()}`, {
|
|
2340
|
+
headers: streamingPageHeaders()
|
|
2341
|
+
});
|
|
2342
|
+
}
|
|
2343
|
+
const bodyStream = renderToWebStream(app, ssrContext);
|
|
2344
|
+
const { firstChunk, reader } = await primeVueStream(bodyStream);
|
|
2075
2345
|
const stream = new ReadableStream({
|
|
2076
2346
|
start(controller) {
|
|
2077
2347
|
controller.enqueue(head);
|
|
@@ -2079,12 +2349,18 @@ var handleVuePageRequest = async (input) => {
|
|
|
2079
2349
|
controller.enqueue(firstChunk.value);
|
|
2080
2350
|
}
|
|
2081
2351
|
if (firstChunk.done) {
|
|
2082
|
-
controller.enqueue(
|
|
2352
|
+
controller.enqueue(buildTail());
|
|
2083
2353
|
controller.close();
|
|
2084
2354
|
return;
|
|
2085
2355
|
}
|
|
2086
2356
|
const pumpLoop = () => {
|
|
2087
|
-
reader.read().then(({ done, value }) => done ? (controller.enqueue(
|
|
2357
|
+
reader.read().then(({ done, value }) => done ? (controller.enqueue(buildTail()), controller.close()) : (controller.enqueue(value), pumpLoop())).catch((err) => {
|
|
2358
|
+
console.error("[SSR] Vue streaming render error:", err);
|
|
2359
|
+
reader.cancel(err).catch(() => {
|
|
2360
|
+
return;
|
|
2361
|
+
});
|
|
2362
|
+
controller.error(err);
|
|
2363
|
+
});
|
|
2088
2364
|
};
|
|
2089
2365
|
pumpLoop();
|
|
2090
2366
|
}
|
|
@@ -2093,20 +2369,24 @@ var handleVuePageRequest = async (input) => {
|
|
|
2093
2369
|
hasIslands: resolvedPage.hasIslands
|
|
2094
2370
|
});
|
|
2095
2371
|
return new Response(htmlStream, {
|
|
2096
|
-
headers:
|
|
2372
|
+
headers: streamingPageHeaders()
|
|
2097
2373
|
});
|
|
2098
2374
|
};
|
|
2099
|
-
|
|
2375
|
+
const pageResponse = await runWithStreamingSlotWarningScope(() => resolvedOptions?.collectStreamingSlots === true ? withRegisteredStreamingSlots(renderPageResponse, resolvedOptions) : renderPageResponse(), { handlerCallsite });
|
|
2376
|
+
return withPageCacheHeaders(pageResponse, input.request, {
|
|
2377
|
+
bufferStreamForEtag: input.bufferStreamForEtag
|
|
2378
|
+
});
|
|
2100
2379
|
} catch (error) {
|
|
2101
2380
|
console.error("[SSR] Vue render error:", error);
|
|
2102
2381
|
const pageName = derivePageName(resolvedPagePath);
|
|
2103
2382
|
const conventionResponse = await renderConventionError("vue", pageName, error);
|
|
2104
|
-
if (conventionResponse)
|
|
2105
|
-
return conventionResponse;
|
|
2106
|
-
|
|
2383
|
+
if (conventionResponse) {
|
|
2384
|
+
return withPageCacheHeaders(conventionResponse, input.request);
|
|
2385
|
+
}
|
|
2386
|
+
return withPageCacheHeaders(new Response(ssrErrorPage("vue", error), {
|
|
2107
2387
|
headers: { "Content-Type": "text/html" },
|
|
2108
2388
|
status: 500
|
|
2109
|
-
});
|
|
2389
|
+
}), input.request);
|
|
2110
2390
|
}
|
|
2111
2391
|
};
|
|
2112
2392
|
// src/vue/routerRedirectProviders.ts
|
|
@@ -2131,5 +2411,5 @@ export {
|
|
|
2131
2411
|
applyVueRouterRedirect
|
|
2132
2412
|
};
|
|
2133
2413
|
|
|
2134
|
-
//# debugId=
|
|
2414
|
+
//# debugId=89D724EF33B3354364756E2164756E21
|
|
2135
2415
|
//# sourceMappingURL=server.js.map
|