@absolutejs/absolute 0.20.0-beta.181 → 0.20.0-beta.183
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/CHANGELOG.md +46 -0
- package/changelog.json +75 -0
- package/dist/angular/browser.js +2 -2
- package/dist/angular/browser.js.map +4 -4
- package/dist/angular/components/constants.js +4 -0
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/angular/index.js +520 -84
- package/dist/angular/index.js.map +13 -12
- package/dist/angular/server.js +520 -84
- package/dist/angular/server.js.map +13 -12
- package/dist/build.js +452 -85
- package/dist/build.js.map +18 -18
- package/dist/cli/{add-8gw9mk2b.js → add-jft96bp4.js} +9 -9
- package/dist/cli/{analyze-e57zz9x8.js → analyze-5w46d1f0.js} +3 -3
- package/dist/cli/{androidEmulatorController-vqc5m2rp.js → androidEmulatorController-gbf9r660.js} +6 -6
- package/dist/cli/{androidNativeWatcher-s03aczxv.js → androidNativeWatcher-3astrxxz.js} +6 -6
- package/dist/cli/{api-8ppxw487.js → api-zmvnvdsf.js} +8 -8
- package/dist/cli/{build-ptx5a72p.js → build-df81wh71.js} +67 -6
- package/dist/cli/{build-fz7qbdn3.js → build-mskrk9zb.js} +3 -3
- package/dist/cli/{buildDepVendor-qnwfct22.js → buildDepVendor-36d1aa7c.js} +2 -2
- package/dist/cli/{buildReactServerComponents-01s87hnk.js → buildReactServerComponents-k6amghrj.js} +5 -5
- package/dist/cli/{compile-54rb8szn.js → compile-7mjd739p.js} +10 -6
- package/dist/cli/config/server.js +37 -18
- package/dist/cli/{db-qbzjw3en.js → db-mpmj37jq.js} +2 -2
- package/dist/cli/{dev-6s6g5tnk.js → dev-9d6d7757.js} +14 -14
- package/dist/cli/{doctor-m36tmx4d.js → doctor-nng9szw6.js} +3 -3
- package/dist/cli/{emulatorDoctor-s1z5tkp7.js → emulatorDoctor-3eszsqs8.js} +5 -5
- package/dist/cli/{emulatorInstaller-pgkdswvq.js → emulatorInstaller-1r6cawm0.js} +6 -6
- package/dist/cli/{env-5nz1qm8e.js → env-bfa7vs35.js} +3 -3
- package/dist/cli/{expoDevController-018anvbm.js → expoDevController-s0msdwbm.js} +6 -6
- package/dist/cli/{generate-5vyz1s44.js → generate-xk3a7qnc.js} +8 -8
- package/dist/cli/{heapDiff-kncvdtn8.js → heapDiff-3ba8p8wf.js} +3 -3
- package/dist/cli/{htmx-26hs6jdm.js → htmx-an2x3gpx.js} +6 -6
- package/dist/cli/{index-7854xf0m.js → index-1bszxtdj.js} +1 -1
- package/dist/cli/{index-kx2d067c.js → index-3066eqr3.js} +8 -5
- package/dist/cli/{index-8khbn8qr.js → index-3a9h87v5.js} +3 -3
- package/dist/cli/{index-jkg2h10c.js → index-3dz754hk.js} +3 -3
- package/dist/cli/{index-9djrap79.js → index-3pz5sjaz.js} +1 -1
- package/dist/cli/{index-50ag35xg.js → index-3ys9tz53.js} +2 -2
- package/dist/cli/{index-6f448d7m.js → index-4ynx0cq6.js} +26 -12
- package/dist/cli/{index-btp4fyf1.js → index-785hpa2r.js} +2 -2
- package/dist/cli/{index-kes8he5s.js → index-9sqqzeq4.js} +1 -1
- package/dist/cli/{index-pr1skxen.js → index-akseq9ps.js} +1 -1
- package/dist/cli/{index-23hvdyxf.js → index-c6j2727a.js} +1 -1
- package/dist/cli/{index-pkw3jktb.js → index-eh786rj4.js} +2 -2
- package/dist/cli/{index-aemhvvwb.js → index-eydgkr7w.js} +1 -1
- package/dist/cli/{index-rz56x932.js → index-fbmfpqk8.js} +1 -1
- package/dist/cli/{index-c8rcfe5a.js → index-fy4th3n0.js} +1 -1
- package/dist/cli/{index-prza6tkp.js → index-gx6pjzzk.js} +3 -3
- package/dist/cli/{index-125cfzvn.js → index-hker5fs4.js} +2 -2
- package/dist/cli/{index-cgmp9d02.js → index-hqkcxa2p.js} +1 -1
- package/dist/cli/{index-5w8arh3m.js → index-pq4qqz0r.js} +2 -2
- package/dist/cli/{index-enbw9484.js → index-wpgsermq.js} +1 -1
- package/dist/cli/{index-0z5fgb80.js → index-wqpg377f.js} +1 -1
- package/dist/cli/{index-3sfcmb49.js → index-x7h6w6td.js} +1 -1
- package/dist/cli/{index-a6xx0p9e.js → index-ydaxsftq.js} +1 -1
- package/dist/cli/{index-3ewt17wm.js → index-yhkg5by0.js} +1 -1
- package/dist/cli/{index-aqe25w4h.js → index-zeeep92g.js} +1 -1
- package/dist/cli/index.js +32 -32
- package/dist/cli/{info-k124sh7g.js → info-5rwsbhe2.js} +4 -4
- package/dist/cli/{inspect-n6pcfvfw.js → inspect-nmwb0q5k.js} +5 -5
- package/dist/cli/{iosNativeWatcher-wdq2fvj1.js → iosNativeWatcher-7r9gnk87.js} +7 -7
- package/dist/cli/{iosSimulatorController-n97dpa8p.js → iosSimulatorController-w963vv9r.js} +7 -7
- package/dist/cli/{islands-17tfx8jf.js → islands-w9xrehpk.js} +3 -3
- package/dist/cli/{logs-shg23fbt.js → logs-m793x8a7.js} +3 -3
- package/dist/cli/{ls-0wr74w0b.js → ls-k31npd5b.js} +3 -3
- package/dist/cli/{mem-16sy1707.js → mem-jm6kw6gr.js} +5 -5
- package/dist/cli/{migrate-k91k050s.js → migrate-95bjkqkr.js} +2 -2
- package/dist/cli/{mobile-hpqpy61f.js → mobile-cpp8vfn7.js} +13 -13
- package/dist/cli/prerender-26pzynh4.js +13 -0
- package/dist/cli/{prettier-dh5fh786.js → prettier-0ws9pbc1.js} +1 -1
- package/dist/cli/{ps-pk7ncjac.js → ps-fx8mz3e3.js} +6 -6
- package/dist/cli/{psTui-50wf0b72.js → psTui-0e9c7an6.js} +7 -7
- package/dist/cli/{remoteMacProtocol-g10s408w.js → remoteMacProtocol-y7h79gr8.js} +7 -7
- package/dist/cli/{remove-x987pvd3.js → remove-xhvph8bz.js} +8 -8
- package/dist/cli/{routes-mc3ymp8t.js → routes-hq9yje5z.js} +3 -3
- package/dist/cli/{start-mbn2zgs2.js → start-5mjh9hh2.js} +5 -5
- package/dist/cli/{typecheck-ynzw2eep.js → typecheck-bvm0ndq4.js} +188 -75
- package/dist/cli/{workspace-7sbyyc59.js → workspace-xeb6abxj.js} +5 -5
- package/dist/dev/serverBootstrap.js +8 -2
- package/dist/index.js +469 -99
- package/dist/index.js.map +20 -20
- package/dist/islands/index.js +312 -23
- package/dist/islands/index.js.map +5 -5
- package/dist/mobile/index.js +2 -2
- package/dist/mobile/index.js.map +3 -3
- package/dist/react/browser.js +18 -1
- package/dist/react/browser.js.map +6 -4
- package/dist/react/components/index.js +2 -2
- package/dist/react/components/index.js.map +3 -3
- package/dist/react/index.js +370 -62
- package/dist/react/index.js.map +14 -13
- package/dist/react/server.js +51 -36
- package/dist/react/server.js.map +10 -10
- package/dist/src/angular/colocatedRouteMatch.d.ts +23 -0
- package/dist/src/angular/components/constants.d.ts +1 -0
- package/dist/src/angular/components/defer-slot-payload.d.ts +5 -0
- package/dist/src/cli/scripts/manifestKeysEditorHint.d.ts +9 -0
- package/dist/src/cli/scripts/typecheck.d.ts +1 -0
- package/dist/src/cli/scripts/typecheckDiagnostics.d.ts +41 -0
- package/dist/src/constants.d.ts +1 -0
- package/dist/src/core/prerender.d.ts +10 -0
- package/dist/src/dev/hot/analyze.d.ts +1 -1
- package/dist/src/react/browser.d.ts +1 -0
- package/dist/src/react/index.d.ts +1 -0
- package/dist/src/svelte/lowerAwaitSlotSyntax.d.ts +23 -0
- package/dist/src/utils/pageCspNonce.d.ts +14 -0
- package/dist/src/utils/spaRouteManifest.d.ts +1 -0
- package/dist/svelte/index.js +372 -69
- package/dist/svelte/index.js.map +11 -11
- package/dist/svelte/server.js +363 -60
- package/dist/svelte/server.js.map +11 -11
- package/dist/types/manifest.d.ts +3 -2
- package/dist/types/svelte.d.ts +3 -0
- package/dist/vue/components/Image.js +2 -2
- package/dist/vue/components/Image.js.map +3 -3
- package/dist/vue/components/index.js +2 -2
- package/dist/vue/components/index.js.map +3 -3
- package/dist/vue/index.js +364 -61
- package/dist/vue/index.js.map +11 -11
- package/dist/vue/server.js +54 -40
- package/dist/vue/server.js.map +9 -9
- package/package.json +1 -1
- package/dist/cli/prerender-w65xp6h8.js +0 -11
- /package/dist/cli/{index-t8jmj8w1.js → index-fm9x6sjs.js} +0 -0
package/dist/angular/index.js
CHANGED
|
@@ -88,7 +88,7 @@ var ABSOLUTE_HTTP_TRANSFER_CACHE_SKIP_HEADER = "x-skip-transfer-cache", buildAbs
|
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
// src/constants.ts
|
|
91
|
-
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_RELOAD_BACKOFF_BASE_MS = 1000, CSS_RELOAD_BACKOFF_MAX_MS = 60000, 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, HTTP_STATUS_GONE = 410, HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, 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;
|
|
91
|
+
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_RELOAD_BACKOFF_BASE_MS = 1000, CSS_RELOAD_BACKOFF_MAX_MS = 60000, 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, HTML_CONTENT_TYPE = "text/html; charset=utf-8", HTTP_STATUS_OK = 200, HTTP_STATUS_BAD_REQUEST = 400, HTTP_STATUS_NOT_FOUND = 404, HTTP_STATUS_GONE = 410, HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, 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;
|
|
92
92
|
var init_constants = __esm(() => {
|
|
93
93
|
TAILWIND_BUN_CSS_WARNING_PATTERN = /invalid @ rule encountered: '@(theme|tailwind|source|utility|variant|custom-variant|apply|reference|plugin|config)'/;
|
|
94
94
|
IMAGE_DEFAULT_DEVICE_SIZES = [
|
|
@@ -865,7 +865,7 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
865
865
|
nonce: readCspNonce()
|
|
866
866
|
});
|
|
867
867
|
return new Response(stream, {
|
|
868
|
-
headers: { "Content-Type":
|
|
868
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
869
869
|
status: 500
|
|
870
870
|
});
|
|
871
871
|
}, renderSvelteError = async (conventionPath, errorProps) => {
|
|
@@ -881,7 +881,7 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
881
881
|
});
|
|
882
882
|
const html = `<!DOCTYPE html><html><head>${nonceSvelteHeadStyles(head)}</head><body>${body}</body></html>`;
|
|
883
883
|
return new Response(html, {
|
|
884
|
-
headers: { "Content-Type":
|
|
884
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
885
885
|
status: 500
|
|
886
886
|
});
|
|
887
887
|
}, unescapeVueStyles = (ssrBody) => {
|
|
@@ -905,7 +905,7 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
905
905
|
const { styles, body } = unescapeVueStyles(rawBody);
|
|
906
906
|
const html = `<!DOCTYPE html><html><head>${styles}</head><body><div id="root">${body}</div></body></html>`;
|
|
907
907
|
return new Response(html, {
|
|
908
|
-
headers: { "Content-Type":
|
|
908
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
909
909
|
status: 500
|
|
910
910
|
});
|
|
911
911
|
}, renderAngularError = async (conventionPath, errorProps) => {
|
|
@@ -915,14 +915,14 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
915
915
|
return null;
|
|
916
916
|
const html = renderFn(errorProps);
|
|
917
917
|
return new Response(html, {
|
|
918
|
-
headers: { "Content-Type":
|
|
918
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
919
919
|
status: 500
|
|
920
920
|
});
|
|
921
921
|
}, 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) => {
|
|
922
922
|
const template = await nonceStaticHtml(await Bun.file(conventionPath).text());
|
|
923
923
|
const html = replaceErrorTokens(template, errorProps);
|
|
924
924
|
return new Response(html, {
|
|
925
|
-
headers: { "Content-Type":
|
|
925
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
926
926
|
status: 500
|
|
927
927
|
});
|
|
928
928
|
}, logConventionRenderError = (framework, label, renderError) => {
|
|
@@ -1001,7 +1001,7 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
1001
1001
|
nonce: readCspNonce()
|
|
1002
1002
|
});
|
|
1003
1003
|
return new Response(stream, {
|
|
1004
|
-
headers: { "Content-Type":
|
|
1004
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
1005
1005
|
status: 404
|
|
1006
1006
|
});
|
|
1007
1007
|
}, renderSvelteNotFound = async (conventionPath) => {
|
|
@@ -1014,7 +1014,7 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
1014
1014
|
const { head, body } = render(NotFoundComponent, nonce ? { csp: { nonce } } : {});
|
|
1015
1015
|
const html = `<!DOCTYPE html><html><head>${nonceSvelteHeadStyles(head)}</head><body>${body}</body></html>`;
|
|
1016
1016
|
return new Response(html, {
|
|
1017
|
-
headers: { "Content-Type":
|
|
1017
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
1018
1018
|
status: 404
|
|
1019
1019
|
});
|
|
1020
1020
|
}, renderVueNotFound = async (conventionPath) => {
|
|
@@ -1031,7 +1031,7 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
1031
1031
|
const { styles, body } = unescapeVueStyles(rawBody);
|
|
1032
1032
|
const html = `<!DOCTYPE html><html><head>${styles}</head><body><div id="root">${body}</div></body></html>`;
|
|
1033
1033
|
return new Response(html, {
|
|
1034
|
-
headers: { "Content-Type":
|
|
1034
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
1035
1035
|
status: 404
|
|
1036
1036
|
});
|
|
1037
1037
|
}, renderAngularNotFound = async (conventionPath) => {
|
|
@@ -1041,13 +1041,13 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
1041
1041
|
return null;
|
|
1042
1042
|
const html = renderFn();
|
|
1043
1043
|
return new Response(html, {
|
|
1044
|
-
headers: { "Content-Type":
|
|
1044
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
1045
1045
|
status: 404
|
|
1046
1046
|
});
|
|
1047
1047
|
}, renderHtmlNotFound = async (conventionPath) => {
|
|
1048
1048
|
const html = await nonceStaticHtml(await Bun.file(conventionPath).text());
|
|
1049
1049
|
return new Response(html, {
|
|
1050
|
-
headers: { "Content-Type":
|
|
1050
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
1051
1051
|
status: 404
|
|
1052
1052
|
});
|
|
1053
1053
|
}, NOT_FOUND_RENDERERS, renderConventionNotFound = async (framework) => {
|
|
@@ -1081,6 +1081,7 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
|
|
|
1081
1081
|
return renderNext(options.preferHtmx ? ["htmx", ...NOT_FOUND_PRIORITY.filter((key) => key !== "htmx")] : NOT_FOUND_PRIORITY);
|
|
1082
1082
|
};
|
|
1083
1083
|
var init_resolveConvention = __esm(() => {
|
|
1084
|
+
init_constants();
|
|
1084
1085
|
init_cspNonceRef();
|
|
1085
1086
|
init_staticHtmlNonce();
|
|
1086
1087
|
init_ssrErrorPage();
|
|
@@ -1436,6 +1437,7 @@ var init_angularDeps = __esm(() => {
|
|
|
1436
1437
|
});
|
|
1437
1438
|
|
|
1438
1439
|
// src/utils/spaRouteManifest.ts
|
|
1440
|
+
import { NotFound } from "elysia";
|
|
1439
1441
|
import { basename as basename2 } from "path";
|
|
1440
1442
|
var SPA_ROUTES_KEY = "__absoluteSpaRoutes", setSpaRouteManifest = (hosts) => {
|
|
1441
1443
|
Reflect.set(globalThis, SPA_ROUTES_KEY, hosts);
|
|
@@ -1500,7 +1502,14 @@ var SPA_ROUTES_KEY = "__absoluteSpaRoutes", setSpaRouteManifest = (hosts) => {
|
|
|
1500
1502
|
}, renderSpaNotFound = async (framework, pageName, request) => {
|
|
1501
1503
|
if (isKnownSpaRoute(framework, pageName, request))
|
|
1502
1504
|
return null;
|
|
1503
|
-
return
|
|
1505
|
+
return renderSpaNotFoundResponse(request);
|
|
1506
|
+
}, renderSpaNotFoundResponse = async (request) => {
|
|
1507
|
+
if (request && !isPageRequest(request)) {
|
|
1508
|
+
return new NotFound().toResponse();
|
|
1509
|
+
}
|
|
1510
|
+
return await renderFirstNotFound({
|
|
1511
|
+
preferHtmx: request?.headers.get("hx-request") === "true"
|
|
1512
|
+
}) ?? new Response("Not found", {
|
|
1504
1513
|
headers: { "Content-Type": "text/plain" },
|
|
1505
1514
|
status: 404
|
|
1506
1515
|
});
|
|
@@ -1557,8 +1566,8 @@ var buildRequestProviders = (deps, request, requestContext, responseInit) => [
|
|
|
1557
1566
|
// src/angular/zoneRuntime.ts
|
|
1558
1567
|
var ZONE_NODE_SPECIFIER = "zone.js/node", MISSING_ZONE_MESSAGE = 'angular.changeDetection is "zone" but zone.js could not be loaded. Install it in your app (bun add zone.js).', isAngularZoneMode = () => globalThis.__absoluteAngularChangeDetection === "zone", setAngularChangeDetection = (mode) => {
|
|
1559
1568
|
globalThis.__absoluteAngularChangeDetection = mode ?? "zoneless";
|
|
1560
|
-
},
|
|
1561
|
-
if (value instanceof NativePromise || !
|
|
1569
|
+
}, isRecord3 = (value) => typeof value === "object" && value !== null, adoptIntoNativePromise = (NativePromise, value) => {
|
|
1570
|
+
if (value instanceof NativePromise || !isRecord3(value))
|
|
1562
1571
|
return value;
|
|
1563
1572
|
const { then } = value;
|
|
1564
1573
|
if (typeof then !== "function")
|
|
@@ -1575,28 +1584,28 @@ var ZONE_NODE_SPECIFIER = "zone.js/node", MISSING_ZONE_MESSAGE = 'angular.change
|
|
|
1575
1584
|
}, wrapRoute = (NativePromise, route) => {
|
|
1576
1585
|
if (typeof route === "function")
|
|
1577
1586
|
return wrapHandler(NativePromise, route);
|
|
1578
|
-
if (!
|
|
1587
|
+
if (!isRecord3(route) || route instanceof Response || route instanceof Blob)
|
|
1579
1588
|
return route;
|
|
1580
1589
|
return Object.fromEntries(Object.entries(route).map(([method, handler]) => [
|
|
1581
1590
|
method,
|
|
1582
1591
|
wrapHandler(NativePromise, handler)
|
|
1583
1592
|
]));
|
|
1584
1593
|
}, wrapServeOptions = (NativePromise, options) => {
|
|
1585
|
-
if (!
|
|
1594
|
+
if (!isRecord3(options))
|
|
1586
1595
|
return options;
|
|
1587
1596
|
const wrapped = { ...options };
|
|
1588
1597
|
if (options.fetch)
|
|
1589
1598
|
wrapped.fetch = wrapHandler(NativePromise, options.fetch);
|
|
1590
1599
|
if (options.error)
|
|
1591
1600
|
wrapped.error = wrapHandler(NativePromise, options.error);
|
|
1592
|
-
if (
|
|
1601
|
+
if (isRecord3(options.routes))
|
|
1593
1602
|
wrapped.routes = Object.fromEntries(Object.entries(options.routes).map(([path, route]) => [
|
|
1594
1603
|
path,
|
|
1595
1604
|
wrapRoute(NativePromise, route)
|
|
1596
1605
|
]));
|
|
1597
1606
|
return wrapped;
|
|
1598
1607
|
}, wrapServerReload = (NativePromise, server) => {
|
|
1599
|
-
if (!
|
|
1608
|
+
if (!isRecord3(server))
|
|
1600
1609
|
return;
|
|
1601
1610
|
const { reload } = server;
|
|
1602
1611
|
if (typeof reload !== "function")
|
|
@@ -2500,23 +2509,247 @@ var AWAIT_STREAM_DIRECTIVE = "<!-- absolute:stream -->", DIRECTIVE_RE, BRANCH_TA
|
|
|
2500
2509
|
index = markup.indexOf("{", end);
|
|
2501
2510
|
}
|
|
2502
2511
|
return tags;
|
|
2503
|
-
}, escapeTemplateLiteral = (value) => value.replaceAll("\\", "\\\\").replaceAll("`", "\\`").replaceAll("${", "\\${"),
|
|
2504
|
-
|
|
2505
|
-
const
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
+
}, escapeTemplateLiteral = (value) => value.replaceAll("\\", "\\\\").replaceAll("`", "\\`").replaceAll("${", "\\${"), HTML_HELPERS = "__absoluteAwaitHtml", AWAIT_SCOPE_CLASS_PLACEHOLDER = "__absoluteAwaitScopeClass__", AWAIT_HTML_HELPERS_SOURCE, applyAwaitScopeClass = (code, scopeClass) => code.replaceAll(AWAIT_SCOPE_CLASS_PLACEHOLDER, scopeClass), createAwaitScopeClassCapture = () => {
|
|
2513
|
+
let scopeClass = "";
|
|
2514
|
+
const cssHash = ({ css, filename, hash }) => {
|
|
2515
|
+
scopeClass = `svelte-${hash(filename === "(unknown)" ? css : filename ?? css)}`;
|
|
2516
|
+
return scopeClass;
|
|
2517
|
+
};
|
|
2518
|
+
const apply = (code) => applyAwaitScopeClass(code, scopeClass);
|
|
2519
|
+
return { apply, cssHash };
|
|
2520
|
+
}, BOOLEAN_ATTRIBUTES, DIRECTIVE_ATTRIBUTE_RE, ATTRIBUTE_NAME_END_RE, RAW_TEXT_ELEMENTS, helperCall = (name, ...args) => `\${${HTML_HELPERS}.${name}(${args.join(", ")})}`, SHADOW_VALUE, END_TAG_RE, isShadowAttribute = (name) => !DIRECTIVE_ATTRIBUTE_RE.test(name) && !/^on/i.test(name), pushText = (scan, text) => {
|
|
2521
|
+
scan.literal += escapeTemplateLiteral(text);
|
|
2522
|
+
}, readExpressionTag = (scan) => {
|
|
2523
|
+
const end = findTagEnd(scan.source, scan.index);
|
|
2524
|
+
if (end === -1) {
|
|
2525
|
+
fail(scan.filePath, `unterminated tag in the ${scan.branch} branch`);
|
|
2526
|
+
}
|
|
2527
|
+
const inner = scan.source.slice(scan.index + 1, end - 1).trim();
|
|
2528
|
+
scan.index = end;
|
|
2529
|
+
return inner;
|
|
2530
|
+
}, failAttribute = (scan, detail) => fail(scan.filePath, `the ${scan.branch} branch of a streamed {#await} has ${detail}`), atValueEnd = (scan, quote) => {
|
|
2531
|
+
const char = scan.source[scan.index] ?? "";
|
|
2532
|
+
if (quote)
|
|
2533
|
+
return char === quote;
|
|
2534
|
+
return /[\s>]/.test(char) || scan.source.startsWith("/>", scan.index);
|
|
2535
|
+
}, readValueText = (scan, quote) => {
|
|
2536
|
+
const start = scan.index;
|
|
2537
|
+
while (scan.index < scan.source.length && scan.source[scan.index] !== "{" && !atValueEnd(scan, quote)) {
|
|
2538
|
+
scan.index += 1;
|
|
2539
|
+
}
|
|
2540
|
+
return scan.source.slice(start, scan.index);
|
|
2541
|
+
}, readAttributeValue = (scan) => {
|
|
2542
|
+
const { source } = scan;
|
|
2543
|
+
const quote = source[scan.index];
|
|
2544
|
+
const chunks = [];
|
|
2545
|
+
const isQuoted = quote === '"' || quote === "'";
|
|
2546
|
+
if (isQuoted)
|
|
2547
|
+
scan.index += 1;
|
|
2548
|
+
if (!isQuoted && source[scan.index] === "{") {
|
|
2549
|
+
chunks.push({ code: readExpressionTag(scan) });
|
|
2550
|
+
return chunks;
|
|
2551
|
+
}
|
|
2552
|
+
const valueQuote = isQuoted ? quote : undefined;
|
|
2553
|
+
while (scan.index < source.length && !atValueEnd(scan, valueQuote)) {
|
|
2554
|
+
chunks.push({ text: readValueText(scan, valueQuote) });
|
|
2555
|
+
if (source[scan.index] === "{")
|
|
2556
|
+
chunks.push({ code: readExpressionTag(scan) });
|
|
2557
|
+
}
|
|
2558
|
+
if (isQuoted)
|
|
2559
|
+
scan.index += 1;
|
|
2560
|
+
return chunks.filter((chunk) => !("text" in chunk) || chunk.text !== "");
|
|
2561
|
+
}, pushDynamicAttribute = (scan, name, chunks) => {
|
|
2562
|
+
if (DIRECTIVE_ATTRIBUTE_RE.test(name) || /^on/i.test(name)) {
|
|
2563
|
+
failAttribute(scan, `an expression in ${name}= (directives and event handlers need Svelte to run them)`);
|
|
2564
|
+
}
|
|
2565
|
+
const tag = chunks.find((chunk) => ("code" in chunk) && /^[#:/@]/.test(chunk.code));
|
|
2566
|
+
if (tag && "code" in tag) {
|
|
2567
|
+
failAttribute(scan, `{${tag.code}} in the ${name}= attribute`);
|
|
2568
|
+
}
|
|
2569
|
+
if (isShadowAttribute(name))
|
|
2570
|
+
scan.shadow += ` ${name}=${SHADOW_VALUE}`;
|
|
2571
|
+
const isClass = name === "class";
|
|
2572
|
+
if (isClass)
|
|
2573
|
+
scan.hasClass = true;
|
|
2574
|
+
const [only] = chunks;
|
|
2575
|
+
const codes = chunks.flatMap((chunk) => ("code" in chunk) ? [`(${chunk.code})`] : []);
|
|
2576
|
+
if (isClass && chunks.length > 1 && codes.length === chunks.length) {
|
|
2577
|
+
scan.literal += helperCall("class", `${HTML_HELPERS}.join(${codes.join(", ")})`);
|
|
2578
|
+
return;
|
|
2579
|
+
}
|
|
2580
|
+
if (chunks.length === 1 && only && "code" in only) {
|
|
2581
|
+
const value = `(${only.code})`;
|
|
2582
|
+
if (name === "class")
|
|
2583
|
+
scan.literal += helperCall("class", value);
|
|
2584
|
+
else if (name === "style")
|
|
2585
|
+
scan.literal += helperCall("style", value);
|
|
2586
|
+
else
|
|
2587
|
+
scan.literal += helperCall("attr", JSON.stringify(name), value, String(BOOLEAN_ATTRIBUTES.has(name)));
|
|
2588
|
+
return;
|
|
2589
|
+
}
|
|
2590
|
+
pushText(scan, ` ${name}="`);
|
|
2591
|
+
for (const chunk of chunks) {
|
|
2592
|
+
if ("code" in chunk)
|
|
2593
|
+
scan.literal += helperCall("part", `(${chunk.code})`);
|
|
2594
|
+
else
|
|
2595
|
+
pushText(scan, chunk.text.replaceAll('"', """));
|
|
2596
|
+
}
|
|
2597
|
+
if (isClass)
|
|
2598
|
+
scan.literal += helperCall("scoped");
|
|
2599
|
+
pushText(scan, '"');
|
|
2600
|
+
}, pushStaticAttribute = (scan, whitespace, name, value) => {
|
|
2601
|
+
if (isShadowAttribute(name))
|
|
2602
|
+
scan.shadow += `${whitespace}${name}=${value}`;
|
|
2603
|
+
if (name !== "class") {
|
|
2604
|
+
pushText(scan, `${whitespace}${name}=${value}`);
|
|
2605
|
+
return;
|
|
2606
|
+
}
|
|
2607
|
+
scan.hasClass = true;
|
|
2608
|
+
const [first = ""] = value;
|
|
2609
|
+
const isQuoted = first === '"' || first === "'";
|
|
2610
|
+
const quote = isQuoted ? first : '"';
|
|
2611
|
+
const classes = isQuoted ? value.slice(1, -1) : value;
|
|
2612
|
+
if (classes === "") {
|
|
2613
|
+
scan.literal += helperCall("class", "''");
|
|
2614
|
+
return;
|
|
2615
|
+
}
|
|
2616
|
+
pushText(scan, `${whitespace}${name}=${quote}${classes}`);
|
|
2617
|
+
scan.literal += helperCall("scoped");
|
|
2618
|
+
pushText(scan, quote);
|
|
2619
|
+
}, readAttributeName = (scan) => {
|
|
2620
|
+
const { source } = scan;
|
|
2621
|
+
const start = scan.index;
|
|
2622
|
+
while (scan.index < source.length && !ATTRIBUTE_NAME_END_RE.test(source[scan.index] ?? "")) {
|
|
2623
|
+
scan.index += 1;
|
|
2624
|
+
}
|
|
2625
|
+
return source.slice(start, scan.index);
|
|
2626
|
+
}, skipWhitespace = (scan) => {
|
|
2627
|
+
const start = scan.index;
|
|
2628
|
+
while (/\s/.test(scan.source[scan.index] ?? ""))
|
|
2629
|
+
scan.index += 1;
|
|
2630
|
+
return scan.source.slice(start, scan.index);
|
|
2631
|
+
}, pushTagExpression = (scan) => {
|
|
2632
|
+
const inner = readExpressionTag(scan);
|
|
2633
|
+
if (!/^[A-Za-z_$][\w$]*$/.test(inner)) {
|
|
2634
|
+
failAttribute(scan, `{${inner}} in a start tag`);
|
|
2635
|
+
}
|
|
2636
|
+
pushDynamicAttribute(scan, inner, [{ code: inner }]);
|
|
2637
|
+
}, pushAttribute = (scan) => {
|
|
2638
|
+
const { source } = scan;
|
|
2639
|
+
const whitespace = skipWhitespace(scan);
|
|
2640
|
+
const closing = source.startsWith("/>", scan.index) ? "/>" : ">";
|
|
2641
|
+
const isEnd = scan.index >= source.length;
|
|
2642
|
+
if (isEnd || source.startsWith(closing, scan.index)) {
|
|
2643
|
+
if (!scan.hasClass)
|
|
2644
|
+
scan.literal += helperCall("scope");
|
|
2645
|
+
const tagEnd = isEnd ? "" : closing;
|
|
2646
|
+
pushText(scan, whitespace + tagEnd);
|
|
2647
|
+
scan.shadow += whitespace + (isEnd ? ">" : closing);
|
|
2648
|
+
scan.index += tagEnd.length;
|
|
2649
|
+
return false;
|
|
2650
|
+
}
|
|
2651
|
+
if (source[scan.index] === "{") {
|
|
2652
|
+
pushTagExpression(scan);
|
|
2653
|
+
return true;
|
|
2654
|
+
}
|
|
2655
|
+
const name = readAttributeName(scan);
|
|
2656
|
+
if (!name) {
|
|
2657
|
+
pushText(scan, whitespace + (source[scan.index] ?? ""));
|
|
2658
|
+
scan.index += 1;
|
|
2659
|
+
return true;
|
|
2660
|
+
}
|
|
2661
|
+
const beforeEquals = scan.index;
|
|
2662
|
+
skipWhitespace(scan);
|
|
2663
|
+
if (source[scan.index] !== "=") {
|
|
2664
|
+
scan.index = beforeEquals;
|
|
2665
|
+
pushText(scan, whitespace + name);
|
|
2666
|
+
if (isShadowAttribute(name))
|
|
2667
|
+
scan.shadow += whitespace + name;
|
|
2668
|
+
return true;
|
|
2512
2669
|
}
|
|
2513
|
-
|
|
2514
|
-
|
|
2670
|
+
scan.index += 1;
|
|
2671
|
+
skipWhitespace(scan);
|
|
2672
|
+
const valueStart = scan.index;
|
|
2673
|
+
const chunks = readAttributeValue(scan);
|
|
2674
|
+
if (chunks.some((chunk) => ("code" in chunk))) {
|
|
2675
|
+
pushDynamicAttribute(scan, name, chunks);
|
|
2676
|
+
return true;
|
|
2677
|
+
}
|
|
2678
|
+
pushStaticAttribute(scan, whitespace, name, source.slice(valueStart, scan.index));
|
|
2679
|
+
return true;
|
|
2680
|
+
}, pushStartTag = (scan) => {
|
|
2681
|
+
const { source } = scan;
|
|
2682
|
+
const nameMatch = source.slice(scan.index + 1).match(/^[^\s/>{]+/);
|
|
2683
|
+
const tagName = nameMatch?.[0] ?? "";
|
|
2684
|
+
pushText(scan, `<${tagName}`);
|
|
2685
|
+
scan.shadow += `<${tagName}`;
|
|
2686
|
+
scan.hasClass = RAW_TEXT_ELEMENTS.has(tagName.toLowerCase());
|
|
2687
|
+
scan.index += 1 + tagName.length;
|
|
2688
|
+
while (pushAttribute(scan))
|
|
2689
|
+
;
|
|
2690
|
+
return tagName.toLowerCase();
|
|
2691
|
+
}, pushRawText = (scan, tagName, shadowStart) => {
|
|
2692
|
+
const { source } = scan;
|
|
2693
|
+
const close = source.toLowerCase().indexOf(`</${tagName}`, scan.index);
|
|
2694
|
+
const closeEnd = close === -1 ? -1 : source.indexOf(">", close);
|
|
2695
|
+
const end = closeEnd === -1 ? source.length : closeEnd + 1;
|
|
2696
|
+
pushText(scan, source.slice(scan.index, end));
|
|
2697
|
+
scan.shadow = scan.shadow.slice(0, shadowStart);
|
|
2698
|
+
scan.index = end;
|
|
2699
|
+
}, pushTextExpression = (scan) => {
|
|
2700
|
+
const inner = readExpressionTag(scan);
|
|
2701
|
+
const rawHtml = inner.match(/^@html\s([\s\S]*)$/);
|
|
2702
|
+
if (rawHtml) {
|
|
2703
|
+
scan.literal += helperCall("html", `(${(rawHtml[1] ?? "").trim()})`);
|
|
2704
|
+
return;
|
|
2705
|
+
}
|
|
2706
|
+
scan.literal += helperCall("text", `(${inner})`);
|
|
2707
|
+
}, pushComment = (scan) => {
|
|
2708
|
+
const close = scan.source.indexOf("-->", scan.index + "<!--".length);
|
|
2709
|
+
const end = close === -1 ? scan.source.length : close + "-->".length;
|
|
2710
|
+
pushText(scan, scan.source.slice(scan.index, end));
|
|
2711
|
+
scan.index = end;
|
|
2712
|
+
}, scanTextPosition = (scan) => {
|
|
2713
|
+
const { index, source } = scan;
|
|
2714
|
+
if (source.startsWith("<!--", index)) {
|
|
2715
|
+
pushComment(scan);
|
|
2716
|
+
return;
|
|
2717
|
+
}
|
|
2718
|
+
if (source[index] === "<" && /[A-Za-z]/.test(source[index + 1] ?? "")) {
|
|
2719
|
+
const shadowStart = scan.shadow.length;
|
|
2720
|
+
const tagName = pushStartTag(scan);
|
|
2721
|
+
if (RAW_TEXT_ELEMENTS.has(tagName))
|
|
2722
|
+
pushRawText(scan, tagName, shadowStart);
|
|
2723
|
+
return;
|
|
2724
|
+
}
|
|
2725
|
+
if (source[index] === "{") {
|
|
2726
|
+
pushTextExpression(scan);
|
|
2727
|
+
return;
|
|
2728
|
+
}
|
|
2729
|
+
const next = source.slice(index + 1).search(/[<{]/);
|
|
2730
|
+
const end = next === -1 ? source.length : index + 1 + next;
|
|
2731
|
+
const text = source.slice(index, end);
|
|
2732
|
+
pushText(scan, text);
|
|
2733
|
+
scan.shadow += (text.match(END_TAG_RE) ?? []).join("");
|
|
2734
|
+
scan.index = end;
|
|
2735
|
+
}, lowerBranch = (markup, branch, filePath) => {
|
|
2736
|
+
const scan = {
|
|
2737
|
+
branch,
|
|
2738
|
+
filePath,
|
|
2739
|
+
hasClass: false,
|
|
2740
|
+
index: 0,
|
|
2741
|
+
literal: "",
|
|
2742
|
+
shadow: "",
|
|
2743
|
+
source: markup.trim()
|
|
2744
|
+
};
|
|
2745
|
+
while (scan.index < scan.source.length)
|
|
2746
|
+
scanTextPosition(scan);
|
|
2747
|
+
return { literal: `\`${scan.literal}\``, shadow: scan.shadow };
|
|
2515
2748
|
}, fail = (filePath, message) => {
|
|
2516
2749
|
throw new Error(`${filePath ? `${filePath}: ` : ""}${message} (${AWAIT_STREAM_DIRECTIVE} streams plain HTML; remove the directive to let Svelte render the block and hydrate it)`);
|
|
2517
2750
|
}, assertPlainHtml = (markup, branch, filePath) => {
|
|
2518
2751
|
const withoutExpressions = topLevelTags(markup).reduceRight((text, { end, start }) => text.slice(0, start) + text.slice(end), markup);
|
|
2519
|
-
const nestedTag = topLevelTags(markup).find(({ text }) => /^\{[
|
|
2752
|
+
const nestedTag = topLevelTags(markup).find(({ text }) => /^\{(?:[#:/]|@(?!html\s))/.test(text));
|
|
2520
2753
|
if (nestedTag || SVELTE_ONLY_MARKUP_RE.test(withoutExpressions)) {
|
|
2521
2754
|
fail(filePath, `the ${branch} branch of a streamed {#await} holds Svelte markup (${nestedTag?.text ?? withoutExpressions.match(SVELTE_ONLY_MARKUP_RE)?.[0]}\u2026)`);
|
|
2522
2755
|
}
|
|
@@ -2560,12 +2793,16 @@ var AWAIT_STREAM_DIRECTIVE = "<!-- absolute:stream -->", DIRECTIVE_RE, BRANCH_TA
|
|
|
2560
2793
|
thenIdentifier: thenMatch?.[2],
|
|
2561
2794
|
thenMarkup
|
|
2562
2795
|
};
|
|
2563
|
-
}, renderSlot = (block, slotId, dynamic) => {
|
|
2796
|
+
}, renderSlot = (block, slotId, dynamic, filePath) => {
|
|
2564
2797
|
const thenValueIdentifier = block.thenIdentifier ?? "__awaitValue";
|
|
2565
2798
|
const catchValueIdentifier = block.catchIdentifier ?? "__awaitError";
|
|
2566
|
-
const
|
|
2567
|
-
|
|
2568
|
-
|
|
2799
|
+
const pending = lowerBranch(block.pendingMarkup, "pending", filePath);
|
|
2800
|
+
const then = lowerBranch(block.thenMarkup, "then", filePath);
|
|
2801
|
+
const caught = block.catchMarkup === undefined ? undefined : lowerBranch(block.catchMarkup, "catch", filePath);
|
|
2802
|
+
const catchBranch = caught ? `catch (${catchValueIdentifier}) { return ${caught.literal}; }` : "catch (_absoluteAwaitError) { throw _absoluteAwaitError; }";
|
|
2803
|
+
const shadows = [pending, then, caught].map((branch) => branch ? `<svelte:element this={'div'} data-absolute-slot="true">${branch.shadow}</svelte:element>` : "").join("");
|
|
2804
|
+
return `<AbsoluteAwaitSlot id="${slotId}"${dynamic ? " dynamic" : ""} fallbackHtml={${pending.literal}} resolve={async () => { try { const ${thenValueIdentifier} = await (${block.expression}); return ${then.literal}; } ${catchBranch} }} />{#if ${HTML_HELPERS}.shadow}${shadows}{/if}`;
|
|
2805
|
+
}, IMPORT_LINE = 'import AbsoluteAwaitSlot from "@absolutejs/absolute/svelte/components/AwaitSlot.svelte";', INJECTED_SCRIPT, lowerSvelteAwaitSlotSyntax = (source, filePath) => {
|
|
2569
2806
|
if (!source.includes("absolute:stream")) {
|
|
2570
2807
|
return { code: source, transformed: false };
|
|
2571
2808
|
}
|
|
@@ -2580,7 +2817,7 @@ var AWAIT_STREAM_DIRECTIVE = "<!-- absolute:stream -->", DIRECTIVE_RE, BRANCH_TA
|
|
|
2580
2817
|
const slotId = `absolute-svelte-await-${awaitIndex.toString(BASE_36_RADIX)}`;
|
|
2581
2818
|
awaitIndex += 1;
|
|
2582
2819
|
lowered += source.slice(cursor, directive.index);
|
|
2583
|
-
lowered += renderSlot(block, slotId, directive[1] !== undefined);
|
|
2820
|
+
lowered += renderSlot(block, slotId, directive[1] !== undefined, filePath);
|
|
2584
2821
|
cursor = block.end;
|
|
2585
2822
|
}
|
|
2586
2823
|
if (awaitIndex === 0) {
|
|
@@ -2590,14 +2827,14 @@ var AWAIT_STREAM_DIRECTIVE = "<!-- absolute:stream -->", DIRECTIVE_RE, BRANCH_TA
|
|
|
2590
2827
|
if (lowered.includes("<script")) {
|
|
2591
2828
|
return {
|
|
2592
2829
|
code: lowered.replace(/<script(\s[^>]*)?>/, (match) => `${match}
|
|
2593
|
-
${
|
|
2830
|
+
${INJECTED_SCRIPT}
|
|
2594
2831
|
`),
|
|
2595
2832
|
transformed: true
|
|
2596
2833
|
};
|
|
2597
2834
|
}
|
|
2598
2835
|
return {
|
|
2599
2836
|
code: `<script lang="ts">
|
|
2600
|
-
${
|
|
2837
|
+
${INJECTED_SCRIPT}
|
|
2601
2838
|
</script>
|
|
2602
2839
|
${lowered}`,
|
|
2603
2840
|
transformed: true
|
|
@@ -2609,6 +2846,64 @@ var init_lowerAwaitSlotSyntax = __esm(() => {
|
|
|
2609
2846
|
BRANCH_TAG_RE = /^\{:(then|catch)(?:\s+([A-Za-z_$][\w$]*))?\s*\}$/;
|
|
2610
2847
|
SVELTE_ONLY_MARKUP_RE = /\{[#:/@]|<[A-Z]|<svelte:/;
|
|
2611
2848
|
QUOTES = new Set(['"', "'", "`"]);
|
|
2849
|
+
AWAIT_HTML_HELPERS_SOURCE = [
|
|
2850
|
+
`const ${HTML_HELPERS} = (() => {`,
|
|
2851
|
+
` const scope = ${JSON.stringify(AWAIT_SCOPE_CLASS_PLACEHOLDER)};`,
|
|
2852
|
+
` const escape = (value, isAttr) => String(value ?? '').replace(isAttr ? /[&"<]/g : /[&<]/g, (char) => char === '&' ? '&' : char === '"' ? '"' : '<');`,
|
|
2853
|
+
"\tconst stringify = (value) => typeof value === 'string' ? value : value == null ? '' : value + '';",
|
|
2854
|
+
"\tconst classNames = (value) => { if (Array.isArray(value)) return value.filter(Boolean).map(classNames).filter(Boolean).join(' '); if (value && typeof value === 'object') return Object.keys(value).filter((key) => value[key]).join(' '); return typeof value === 'string' || typeof value === 'number' ? String(value) : ''; };",
|
|
2855
|
+
"\treturn {",
|
|
2856
|
+
` attr: (name, value, isBoolean) => { const boolean = isBoolean || (name === 'hidden' && value !== 'until-found'); if (value == null || (!value && boolean)) return ''; const normalized = name === 'translate' && typeof value === 'boolean' ? (value ? 'yes' : 'no') : value; return boolean ? ' ' + name + '=""' : ' ' + name + '="' + escape(normalized, true) + '"'; },`,
|
|
2857
|
+
` class: (value) => { const resolved = typeof value === 'object' ? classNames(value) : value ?? ''; let name = '' + resolved; if (scope) name = name ? name + ' ' + scope : scope; return name ? ' class="' + escape(name, true) + '"' : ''; },`,
|
|
2858
|
+
"\t\thtml: (value) => String(value ?? ''),",
|
|
2859
|
+
"\t\tjoin: (...values) => values.map(stringify).join(''),",
|
|
2860
|
+
"\t\tpart: (value) => escape(stringify(value), true),",
|
|
2861
|
+
` scope: () => scope ? ' class="' + scope + '"' : '',`,
|
|
2862
|
+
"\t\tscoped: () => scope ? ' ' + scope : '',",
|
|
2863
|
+
"\t\tshadow: false,",
|
|
2864
|
+
` style: (value) => { const style = value == null ? '' : String(value); return style ? ' style="' + escape(style, true) + '"' : ''; },`,
|
|
2865
|
+
"\t\ttext: (value) => escape(value, false)",
|
|
2866
|
+
"\t};",
|
|
2867
|
+
"})();"
|
|
2868
|
+
].join(`
|
|
2869
|
+
`);
|
|
2870
|
+
BOOLEAN_ATTRIBUTES = new Set([
|
|
2871
|
+
"allowfullscreen",
|
|
2872
|
+
"async",
|
|
2873
|
+
"autofocus",
|
|
2874
|
+
"autoplay",
|
|
2875
|
+
"checked",
|
|
2876
|
+
"controls",
|
|
2877
|
+
"default",
|
|
2878
|
+
"defer",
|
|
2879
|
+
"disabled",
|
|
2880
|
+
"disablepictureinpicture",
|
|
2881
|
+
"disableremoteplayback",
|
|
2882
|
+
"formnovalidate",
|
|
2883
|
+
"indeterminate",
|
|
2884
|
+
"inert",
|
|
2885
|
+
"ismap",
|
|
2886
|
+
"loop",
|
|
2887
|
+
"multiple",
|
|
2888
|
+
"muted",
|
|
2889
|
+
"nomodule",
|
|
2890
|
+
"novalidate",
|
|
2891
|
+
"open",
|
|
2892
|
+
"playsinline",
|
|
2893
|
+
"readonly",
|
|
2894
|
+
"required",
|
|
2895
|
+
"reversed",
|
|
2896
|
+
"seamless",
|
|
2897
|
+
"selected",
|
|
2898
|
+
"webkitdirectory"
|
|
2899
|
+
]);
|
|
2900
|
+
DIRECTIVE_ATTRIBUTE_RE = /^(?:animate|bind|class|in|let|on|out|style|transition|use):/;
|
|
2901
|
+
ATTRIBUTE_NAME_END_RE = /[\s=>/{]/;
|
|
2902
|
+
RAW_TEXT_ELEMENTS = new Set(["script", "style"]);
|
|
2903
|
+
SHADOW_VALUE = `{${HTML_HELPERS}.shadow}`;
|
|
2904
|
+
END_TAG_RE = /<\/[A-Za-z][^\s>]*\s*>/g;
|
|
2905
|
+
INJECTED_SCRIPT = `${IMPORT_LINE}
|
|
2906
|
+
${AWAIT_HTML_HELPERS_SOURCE}`;
|
|
2612
2907
|
});
|
|
2613
2908
|
|
|
2614
2909
|
// src/build/stylePreprocessor.ts
|
|
@@ -3188,15 +3483,15 @@ var init_stylePreprocessor = __esm(() => {
|
|
|
3188
3483
|
});
|
|
3189
3484
|
|
|
3190
3485
|
// src/svelte/router/lazyModule.ts
|
|
3191
|
-
var LAZY_RESOLVED_KEY, LAZY_SOURCE_EXPORT = "__ABSOLUTE_SVELTE_SOURCE__",
|
|
3486
|
+
var LAZY_RESOLVED_KEY, LAZY_SOURCE_EXPORT = "__ABSOLUTE_SVELTE_SOURCE__", isRecord4 = (value) => typeof value === "object" && value !== null, isComponent = (value) => typeof value === "function", toLazyComponent = (value) => {
|
|
3192
3487
|
if (isComponent(value))
|
|
3193
3488
|
return value;
|
|
3194
|
-
if (!
|
|
3489
|
+
if (!isRecord4(value))
|
|
3195
3490
|
return;
|
|
3196
3491
|
const fallback = value.default;
|
|
3197
3492
|
return isComponent(fallback) ? fallback : undefined;
|
|
3198
3493
|
}, readSourceFrom = (value) => {
|
|
3199
|
-
if (!
|
|
3494
|
+
if (!isRecord4(value) && !isComponent(value))
|
|
3200
3495
|
return;
|
|
3201
3496
|
const source = Reflect.get(value, LAZY_SOURCE_EXPORT);
|
|
3202
3497
|
return typeof source === "string" ? source : undefined;
|
|
@@ -3205,7 +3500,7 @@ var LAZY_RESOLVED_KEY, LAZY_SOURCE_EXPORT = "__ABSOLUTE_SVELTE_SOURCE__", isReco
|
|
|
3205
3500
|
const fromValue = readSourceFrom(value);
|
|
3206
3501
|
if (fromValue !== undefined)
|
|
3207
3502
|
return fromValue;
|
|
3208
|
-
if (!
|
|
3503
|
+
if (!isRecord4(value))
|
|
3209
3504
|
return;
|
|
3210
3505
|
return readSourceFrom(value.default);
|
|
3211
3506
|
};
|
|
@@ -3380,15 +3675,18 @@ var serverCacheRoot2, compiledModuleCache2, originalSourcePathCache, syncIslandG
|
|
|
3380
3675
|
for (const [spec, resolvedModuleImport] of rewrittenModulePaths) {
|
|
3381
3676
|
transpiled = replaceQuotedSpecifier(transpiled, spec, resolvedModuleImport);
|
|
3382
3677
|
}
|
|
3383
|
-
|
|
3678
|
+
const scopeClass = createAwaitScopeClassCapture();
|
|
3679
|
+
const compiledServer = compile(transpiled, {
|
|
3384
3680
|
css: "injected",
|
|
3681
|
+
cssHash: scopeClass.cssHash,
|
|
3385
3682
|
experimental: {
|
|
3386
3683
|
async: loweredAwaitSource.transformed || loweredSource.transformed
|
|
3387
3684
|
},
|
|
3388
3685
|
filename: resolutionSourcePath,
|
|
3389
3686
|
generate: "server",
|
|
3390
3687
|
hmr: isDevelopmentRuntime()
|
|
3391
|
-
})
|
|
3688
|
+
});
|
|
3689
|
+
let compiledCode = scopeClass.apply(compiledServer.js.code);
|
|
3392
3690
|
for (const [spec, compiledChildPath] of childModulePaths) {
|
|
3393
3691
|
compiledCode = replaceQuotedSpecifier(compiledCode, spec, ensureRelativeImportPath(getCachedModulePath2(sourcePath), compiledChildPath));
|
|
3394
3692
|
}
|
|
@@ -3586,14 +3884,14 @@ var defineIslandComponent = (component, options) => ({
|
|
|
3586
3884
|
component,
|
|
3587
3885
|
export: options.export,
|
|
3588
3886
|
source: options.source
|
|
3589
|
-
}), defineIslandRegistry = (registry) => registry,
|
|
3887
|
+
}), defineIslandRegistry = (registry) => registry, isRecord5 = (value) => typeof value === "object" && value !== null, getIslandBuildReference = (component) => {
|
|
3590
3888
|
if (!isIslandComponentDefinition(component))
|
|
3591
3889
|
return null;
|
|
3592
3890
|
return {
|
|
3593
3891
|
export: component.export,
|
|
3594
3892
|
source: component.source
|
|
3595
3893
|
};
|
|
3596
|
-
}, isIslandComponentDefinition = (value) =>
|
|
3894
|
+
}, isIslandComponentDefinition = (value) => isRecord5(value) && ("component" in value) && ("source" in value) && typeof value.source === "string", parseIslandProps = (rawProps) => {
|
|
3597
3895
|
if (!rawProps)
|
|
3598
3896
|
return {};
|
|
3599
3897
|
return JSON.parse(rawProps);
|
|
@@ -3617,7 +3915,7 @@ var init_islandMarkupAttributes = __esm(() => {
|
|
|
3617
3915
|
var islandSequence = 0, resolvedServerComponentCache, resolvedServerBuildComponentCache, syncIslandGeneration3, nextIslandId = () => {
|
|
3618
3916
|
islandSequence += 1;
|
|
3619
3917
|
return `island-${islandSequence}`;
|
|
3620
|
-
},
|
|
3918
|
+
}, isRecord6 = (value) => typeof value === "object" && value !== null, isReactServerIslandComponent = (value) => typeof value === "function", isSvelteServerIslandComponent = (value) => typeof value === "function", isVueServerIslandComponent = (value) => typeof value === "function" || isRecord6(value), isAngularServerIslandComponent = (value) => typeof value === "function", resolveBuildReferencePath = (source, registryPath) => {
|
|
3621
3919
|
if (source.startsWith("file://"))
|
|
3622
3920
|
return new URL(source).pathname;
|
|
3623
3921
|
if (source.startsWith("."))
|
|
@@ -4086,13 +4384,13 @@ var ABSOLUTE_MOBILE_PAGE_MEDIA_TYPE = "application/vnd.absolute.page+json", ABSO
|
|
|
4086
4384
|
}, headerVaryValues, envelopeResponse = (response, status) => new Response(JSON.stringify({
|
|
4087
4385
|
protocol: ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,
|
|
4088
4386
|
response
|
|
4089
|
-
}), { headers: responseHeaders(), status }),
|
|
4387
|
+
}), { headers: responseHeaders(), status }), isRecord8 = (value) => typeof value === "object" && value !== null && !Array.isArray(value), normalizeJsonValue = (value) => {
|
|
4090
4388
|
const serialized = JSON.stringify(value);
|
|
4091
4389
|
if (serialized === undefined) {
|
|
4092
4390
|
throw new TypeError("Mobile page props must be JSON-serializable.");
|
|
4093
4391
|
}
|
|
4094
4392
|
const parsed = JSON.parse(serialized);
|
|
4095
|
-
if (!
|
|
4393
|
+
if (!isRecord8(parsed)) {
|
|
4096
4394
|
throw new TypeError("Mobile page props must serialize to an object.");
|
|
4097
4395
|
}
|
|
4098
4396
|
return parsed;
|
|
@@ -4322,14 +4620,14 @@ var init_pageProtocol = __esm(() => {
|
|
|
4322
4620
|
|
|
4323
4621
|
// src/core/pageResponseCache.ts
|
|
4324
4622
|
import { createHash } from "crypto";
|
|
4325
|
-
var STREAMING_PAGE_HEADER = "x-absolute-stream",
|
|
4623
|
+
var STREAMING_PAGE_HEADER = "x-absolute-stream", HTML_MEDIA_TYPE = "text/html", streamingPageHeaders = (extra) => {
|
|
4326
4624
|
const headers = new Headers(extra);
|
|
4327
4625
|
headers.set("content-type", HTML_CONTENT_TYPE);
|
|
4328
4626
|
headers.set(STREAMING_PAGE_HEADER, "1");
|
|
4329
4627
|
return headers;
|
|
4330
4628
|
}, computeEtag = (html) => `W/"${createHash("sha1").update(html).digest("base64url")}"`, withPageCacheHeaders = async (response, request, options) => {
|
|
4331
4629
|
const contentType = response.headers.get("content-type") ?? "";
|
|
4332
|
-
if (!contentType.includes(
|
|
4630
|
+
if (!contentType.includes(HTML_MEDIA_TYPE))
|
|
4333
4631
|
return response;
|
|
4334
4632
|
const isStreaming = response.headers.get(STREAMING_PAGE_HEADER) === "1";
|
|
4335
4633
|
if (isStreaming && !options?.bufferStreamForEtag || !response.body) {
|
|
@@ -4355,7 +4653,9 @@ var STREAMING_PAGE_HEADER = "x-absolute-stream", HTML_CONTENT_TYPE = "text/html"
|
|
|
4355
4653
|
statusText: response.statusText
|
|
4356
4654
|
});
|
|
4357
4655
|
};
|
|
4358
|
-
var init_pageResponseCache = () => {
|
|
4656
|
+
var init_pageResponseCache = __esm(() => {
|
|
4657
|
+
init_constants();
|
|
4658
|
+
});
|
|
4359
4659
|
|
|
4360
4660
|
// src/client/streamSwap.ts
|
|
4361
4661
|
var streamSwapRuntime = () => {
|
|
@@ -4492,7 +4792,7 @@ var SLOT_ID_PREFIX = "abs-slot-", CLOSING_BODY_TAG = "</body>", CLOSING_HEAD_TAG
|
|
|
4492
4792
|
getStreamingSlotsRuntimeScript()
|
|
4493
4793
|
].filter(Boolean).join(";");
|
|
4494
4794
|
return `<script${createNonceAttr(nonce)}>${escapeScriptContent(runtimeBody)}</script>`;
|
|
4495
|
-
}, toUint8 = (value, encoder) => encoder.encode(value),
|
|
4795
|
+
}, toUint8 = (value, encoder) => encoder.encode(value), isRecord9 = (value) => Boolean(value) && typeof value === "object", isSafeHtmlLike = (value) => isRecord9(value) && typeof value.changingThisBreaksApplicationSecurity === "string", normalizeSafeHtml = (value) => {
|
|
4496
4796
|
if (isSafeHtmlLike(value)) {
|
|
4497
4797
|
return value.changingThisBreaksApplicationSecurity;
|
|
4498
4798
|
}
|
|
@@ -4553,7 +4853,7 @@ var SLOT_ID_PREFIX = "abs-slot-", CLOSING_BODY_TAG = "</body>", CLOSING_HEAD_TAG
|
|
|
4553
4853
|
}, createTimeoutError = (slot, timeoutMs) => {
|
|
4554
4854
|
const error = Object.assign(new Error(`Streaming slot "${slot.id}" timed out after ${timeoutMs}ms`), { __absTimeout: true });
|
|
4555
4855
|
return error;
|
|
4556
|
-
}, isSlotPatchPayloadObject = (value) =>
|
|
4856
|
+
}, isSlotPatchPayloadObject = (value) => isRecord9(value) && ("html" in value), isTimeoutError = (error) => isRecord9(error) && error.__absTimeout === true, toStreamingSlot = (slot, policy) => ({
|
|
4557
4857
|
dynamic: slot.dynamic,
|
|
4558
4858
|
errorHtml: slot.errorHtml === undefined ? policy.errorHtml : slot.errorHtml,
|
|
4559
4859
|
fallbackHtml: normalizeSlotText(slot.fallbackHtml, policy.fallbackHtml),
|
|
@@ -4807,9 +5107,9 @@ var SLOT_ID_PREFIX = "abs-slot-", CLOSING_BODY_TAG = "</body>", CLOSING_HEAD_TAG
|
|
|
4807
5107
|
tail: ""
|
|
4808
5108
|
};
|
|
4809
5109
|
};
|
|
4810
|
-
const handleBaseWinner = (controller, winner, baseRead, tail, footer) => {
|
|
5110
|
+
const handleBaseWinner = (controller, winner, baseRead, tail, footer, baseDone) => {
|
|
4811
5111
|
if (winner.kind !== "base") {
|
|
4812
|
-
return { baseDone
|
|
5112
|
+
return { baseDone, baseRead, footer, handled: false, tail };
|
|
4813
5113
|
}
|
|
4814
5114
|
if (winner.done) {
|
|
4815
5115
|
return finalizeCompletedBaseWinner(controller, tail + decoder.decode(), baseRead);
|
|
@@ -4852,7 +5152,7 @@ var SLOT_ID_PREFIX = "abs-slot-", CLOSING_BODY_TAG = "</body>", CLOSING_HEAD_TAG
|
|
|
4852
5152
|
return footer;
|
|
4853
5153
|
}
|
|
4854
5154
|
const winner = await Promise.race(racers);
|
|
4855
|
-
const baseWinnerState = applyBaseWinnerState(handleBaseWinner(controller, winner, baseRead, tail, footer), winner, (slotWinner) => {
|
|
5155
|
+
const baseWinnerState = applyBaseWinnerState(handleBaseWinner(controller, winner, baseRead, tail, footer, baseDone), winner, (slotWinner) => {
|
|
4856
5156
|
handleResolvedSlot(controller, slotWinner);
|
|
4857
5157
|
});
|
|
4858
5158
|
({ baseDone, baseRead, footer, tail } = baseWinnerState);
|
|
@@ -5215,10 +5515,10 @@ var isInterpolatedExpressionStart = (value, index) => value[index] === "{" && va
|
|
|
5215
5515
|
}
|
|
5216
5516
|
return {
|
|
5217
5517
|
content: parsedBlock.content.trim(),
|
|
5218
|
-
nextIndex: input.keyword === "@placeholder" ?
|
|
5518
|
+
nextIndex: input.keyword === "@placeholder" ? skipWhitespace2(input.template, parsedBlock.nextIndex) : parsedBlock.nextIndex
|
|
5219
5519
|
};
|
|
5220
5520
|
}, resolveDeferSlotStart = (template, deferIndex, markerCursor) => {
|
|
5221
|
-
const nextMarkerCursor =
|
|
5521
|
+
const nextMarkerCursor = skipWhitespace2(template, markerCursor);
|
|
5222
5522
|
if (template[nextMarkerCursor] === "{") {
|
|
5223
5523
|
return {
|
|
5224
5524
|
changed: false,
|
|
@@ -5443,7 +5743,7 @@ var isInterpolatedExpressionStart = (value, index) => value[index] === "{" && va
|
|
|
5443
5743
|
template: resolvedBlockState.template
|
|
5444
5744
|
};
|
|
5445
5745
|
}
|
|
5446
|
-
const blockContent = parsePlaceholderAndErrorBlocks(template,
|
|
5746
|
+
const blockContent = parsePlaceholderAndErrorBlocks(template, skipWhitespace2(template, resolvedBlock.nextIndex));
|
|
5447
5747
|
const builtSlot = buildDeferredSlot({
|
|
5448
5748
|
cursorAfterResolved: blockContent.cursorAfterResolved,
|
|
5449
5749
|
errorHtml: blockContent.errorHtml,
|
|
@@ -5473,14 +5773,14 @@ var isInterpolatedExpressionStart = (value, index) => value[index] === "{" && va
|
|
|
5473
5773
|
({ cursor, depth } = consumed);
|
|
5474
5774
|
}
|
|
5475
5775
|
return { content: value.slice(start + 1), nextIndex: value.length };
|
|
5476
|
-
},
|
|
5776
|
+
}, skipWhitespace2 = (value, index) => {
|
|
5477
5777
|
let cursor = index;
|
|
5478
5778
|
while (cursor < value.length && /\s/.test(value[cursor] ?? "")) {
|
|
5479
5779
|
cursor += 1;
|
|
5480
5780
|
}
|
|
5481
5781
|
return cursor;
|
|
5482
5782
|
}, parseOptionalParenthesizedBlock = (value, index) => {
|
|
5483
|
-
let cursor =
|
|
5783
|
+
let cursor = skipWhitespace2(value, index);
|
|
5484
5784
|
if (value[cursor] !== "(") {
|
|
5485
5785
|
return null;
|
|
5486
5786
|
}
|
|
@@ -5544,7 +5844,7 @@ var isInterpolatedExpressionStart = (value, index) => value[index] === "{" && va
|
|
|
5544
5844
|
return null;
|
|
5545
5845
|
}
|
|
5546
5846
|
const blockKeywordCursor = cursorAfterResolved + keyword.length;
|
|
5547
|
-
const blockStart =
|
|
5847
|
+
const blockStart = skipWhitespace2(template, blockKeywordCursor);
|
|
5548
5848
|
if (template[blockStart] !== "{") {
|
|
5549
5849
|
return null;
|
|
5550
5850
|
}
|
|
@@ -6216,7 +6516,7 @@ ${importLine}${source.slice(insertAt)}`;
|
|
|
6216
6516
|
const rawExpression = value.slice(interpolationStart + 2, nextCursor - 2).trim();
|
|
6217
6517
|
const expression = rawExpression.length === 0 ? "''" : rawExpression;
|
|
6218
6518
|
const expressionLiteral = JSON.stringify(expression);
|
|
6219
|
-
parts.push(`\${this.__absoluteDeferResolveTemplateExpression(${expressionLiteral})}`);
|
|
6519
|
+
parts.push(`\${this.__absoluteDeferEscapeHtml(this.__absoluteDeferResolveTemplateExpression(${expressionLiteral}))}`);
|
|
6220
6520
|
cursor = nextCursor;
|
|
6221
6521
|
}
|
|
6222
6522
|
return parts.join("");
|
|
@@ -6247,6 +6547,10 @@ ${importLine}${source.slice(insertAt)}`;
|
|
|
6247
6547
|
` + ` return value;
|
|
6248
6548
|
` + ` }
|
|
6249
6549
|
|
|
6550
|
+
` + ` __absoluteDeferEscapeHtml(value: string) {
|
|
6551
|
+
` + ` return value.replace(/[&<>"']/g, (char) => char === '&' ? '&' : char === '<' ? '<' : char === '>' ? '>' : char === '"' ? '"' : ''');
|
|
6552
|
+
` + ` }
|
|
6553
|
+
|
|
6250
6554
|
`, buildDeferSlotFields = (slots) => [
|
|
6251
6555
|
buildDeferSlotTemplateResolver(),
|
|
6252
6556
|
...slots.map((slot, index) => {
|
|
@@ -16214,6 +16518,129 @@ var resolveRequestBaseHref = (route, request) => deriveAngularBaseHref(route, re
|
|
|
16214
16518
|
// src/angular/pageHandler.ts
|
|
16215
16519
|
init_spaRouteManifest();
|
|
16216
16520
|
|
|
16521
|
+
// src/angular/colocatedRouteMatch.ts
|
|
16522
|
+
var MAX_ROUTE_DEPTH = 32;
|
|
16523
|
+
var isRecord2 = (value) => typeof value === "object" && value !== null;
|
|
16524
|
+
var PRIMARY_OUTLET = "primary";
|
|
16525
|
+
var routeOutlet = (route) => typeof route.outlet === "string" ? route.outlet : PRIMARY_OUTLET;
|
|
16526
|
+
var matchRoute = (route, segments) => {
|
|
16527
|
+
if (!isRecord2(route))
|
|
16528
|
+
return true;
|
|
16529
|
+
if (routeOutlet(route) !== PRIMARY_OUTLET)
|
|
16530
|
+
return false;
|
|
16531
|
+
if (typeof route.matcher === "function")
|
|
16532
|
+
return true;
|
|
16533
|
+
if (typeof route.path !== "string")
|
|
16534
|
+
return true;
|
|
16535
|
+
const { path } = route;
|
|
16536
|
+
const parts = path.split("/").filter((part) => part !== "");
|
|
16537
|
+
if (parts.includes("**"))
|
|
16538
|
+
return true;
|
|
16539
|
+
const isFull = route.pathMatch === "full";
|
|
16540
|
+
if (parts.length > segments.length)
|
|
16541
|
+
return false;
|
|
16542
|
+
if (isFull && parts.length < segments.length)
|
|
16543
|
+
return false;
|
|
16544
|
+
const consumed = parts.every((part, index) => part.startsWith(":") || part === segments[index]);
|
|
16545
|
+
if (!consumed)
|
|
16546
|
+
return false;
|
|
16547
|
+
const rest = segments.slice(parts.length);
|
|
16548
|
+
if (route.redirectTo !== undefined)
|
|
16549
|
+
return true;
|
|
16550
|
+
if (route.loadChildren !== undefined)
|
|
16551
|
+
return true;
|
|
16552
|
+
if (route.children !== undefined)
|
|
16553
|
+
return { children: route.children, rest };
|
|
16554
|
+
return rest.length === 0;
|
|
16555
|
+
};
|
|
16556
|
+
var matchRoutes = (routes, segments, depth) => {
|
|
16557
|
+
if (!Array.isArray(routes) || depth > MAX_ROUTE_DEPTH)
|
|
16558
|
+
return true;
|
|
16559
|
+
if (segments.length === 0)
|
|
16560
|
+
return true;
|
|
16561
|
+
return routes.some((route) => {
|
|
16562
|
+
const result = matchRoute(route, segments);
|
|
16563
|
+
if (typeof result === "boolean")
|
|
16564
|
+
return result;
|
|
16565
|
+
return matchRoutes(result.children, result.rest, depth + 1);
|
|
16566
|
+
});
|
|
16567
|
+
};
|
|
16568
|
+
var decodeSegment = (segment) => {
|
|
16569
|
+
try {
|
|
16570
|
+
return decodeURIComponent(segment);
|
|
16571
|
+
} catch {
|
|
16572
|
+
return null;
|
|
16573
|
+
}
|
|
16574
|
+
};
|
|
16575
|
+
var toUrlSegments = (path) => {
|
|
16576
|
+
if (path.includes("(") || path.includes(")"))
|
|
16577
|
+
return null;
|
|
16578
|
+
const decoded = path.split("/").map((raw) => raw.split(";")[0] ?? "").filter((segment) => segment !== "").map(decodeSegment);
|
|
16579
|
+
if (decoded.some((segment) => segment === null))
|
|
16580
|
+
return null;
|
|
16581
|
+
return decoded.filter((segment) => segment !== null);
|
|
16582
|
+
};
|
|
16583
|
+
var matchesAngularColocatedRoutes = (routes, path) => {
|
|
16584
|
+
const segments = toUrlSegments(path);
|
|
16585
|
+
if (segments === null)
|
|
16586
|
+
return true;
|
|
16587
|
+
return matchRoutes(routes, segments, 0);
|
|
16588
|
+
};
|
|
16589
|
+
var pathBelowBaseHref = (pathname, baseHref) => {
|
|
16590
|
+
const collapsed = pathname.replace(/\/{2,}/g, "/");
|
|
16591
|
+
const base = baseHref.endsWith("/") ? baseHref : `${baseHref}/`;
|
|
16592
|
+
if (`${collapsed}/` === base)
|
|
16593
|
+
return "";
|
|
16594
|
+
if (!collapsed.startsWith(base))
|
|
16595
|
+
return null;
|
|
16596
|
+
return collapsed.slice(base.length);
|
|
16597
|
+
};
|
|
16598
|
+
var WILDCARD_SUFFIX2 = "/*";
|
|
16599
|
+
var ROOT_WILDCARD = "/*";
|
|
16600
|
+
var MAX_PROVIDER_DEPTH = 8;
|
|
16601
|
+
var providesBaseHref = (provider, depth = 0) => {
|
|
16602
|
+
if (depth > MAX_PROVIDER_DEPTH)
|
|
16603
|
+
return true;
|
|
16604
|
+
if (Array.isArray(provider))
|
|
16605
|
+
return provider.some((entry) => providesBaseHref(entry, depth + 1));
|
|
16606
|
+
if (!isRecord2(provider))
|
|
16607
|
+
return false;
|
|
16608
|
+
const nested = Reflect.get(provider, "\u0275providers");
|
|
16609
|
+
if (Array.isArray(nested))
|
|
16610
|
+
return providesBaseHref(nested, depth + 1);
|
|
16611
|
+
if (!("provide" in provider))
|
|
16612
|
+
return false;
|
|
16613
|
+
return String(provider.provide).includes("appBaseHref");
|
|
16614
|
+
};
|
|
16615
|
+
var isUnmatchedColocatedRoute = ({
|
|
16616
|
+
handlerProviders,
|
|
16617
|
+
pageModule,
|
|
16618
|
+
request,
|
|
16619
|
+
route,
|
|
16620
|
+
runtimeBaseHref
|
|
16621
|
+
}) => {
|
|
16622
|
+
if (!request || !route?.endsWith(WILDCARD_SUFFIX2))
|
|
16623
|
+
return false;
|
|
16624
|
+
const { providers, routes } = pageModule;
|
|
16625
|
+
if (!Array.isArray(routes) || !Array.isArray(providers))
|
|
16626
|
+
return false;
|
|
16627
|
+
if (providesBaseHref(handlerProviders))
|
|
16628
|
+
return false;
|
|
16629
|
+
const baseHref = runtimeBaseHref ?? (route === ROOT_WILDCARD ? "/" : null);
|
|
16630
|
+
if (baseHref === null)
|
|
16631
|
+
return false;
|
|
16632
|
+
let pathname;
|
|
16633
|
+
try {
|
|
16634
|
+
({ pathname } = new URL(request.url));
|
|
16635
|
+
} catch {
|
|
16636
|
+
return false;
|
|
16637
|
+
}
|
|
16638
|
+
const path = pathBelowBaseHref(pathname, baseHref);
|
|
16639
|
+
if (path === null)
|
|
16640
|
+
return false;
|
|
16641
|
+
return !matchesAngularColocatedRoutes(routes, path);
|
|
16642
|
+
};
|
|
16643
|
+
|
|
16217
16644
|
// src/angular/lowerServerIslands.ts
|
|
16218
16645
|
init_renderIslandMarkup();
|
|
16219
16646
|
var ANGULAR_ISLAND_TAG_RE = /<absolute-island\b([^>]*)>[\s\S]*?<\/absolute-island>/gi;
|
|
@@ -16231,7 +16658,7 @@ var islandHydrationModes = [
|
|
|
16231
16658
|
"none"
|
|
16232
16659
|
];
|
|
16233
16660
|
var decodeHtmlAttribute = (value) => value.replaceAll(""", '"').replaceAll(""", '"').replaceAll("'", "'").replaceAll("'", "'").replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">");
|
|
16234
|
-
var
|
|
16661
|
+
var isRecord7 = (value) => typeof value === "object" && value !== null;
|
|
16235
16662
|
var isIslandFramework = (value) => islandFrameworks.some((framework) => framework === value);
|
|
16236
16663
|
var isIslandHydrate = (value) => islandHydrationModes.some((mode) => mode === value);
|
|
16237
16664
|
var parseAttributes = (attributeString) => {
|
|
@@ -16262,7 +16689,7 @@ var parseAngularIslandProps = (attributeString) => {
|
|
|
16262
16689
|
let parsedProps = {};
|
|
16263
16690
|
try {
|
|
16264
16691
|
const candidate = JSON.parse(serializedProps);
|
|
16265
|
-
parsedProps =
|
|
16692
|
+
parsedProps = isRecord7(candidate) ? candidate : {};
|
|
16266
16693
|
} catch {}
|
|
16267
16694
|
return {
|
|
16268
16695
|
component,
|
|
@@ -16631,11 +17058,11 @@ var runWithStreamingSlotWarningScope = (task, metadata) => ensureWarningStorage(
|
|
|
16631
17058
|
|
|
16632
17059
|
// src/angular/pageHandler.ts
|
|
16633
17060
|
init_ssrRender();
|
|
16634
|
-
var
|
|
17061
|
+
var isRecord10 = (value) => typeof value === "object" && value !== null;
|
|
16635
17062
|
var isAngularComponent = (value) => typeof value === "function";
|
|
16636
17063
|
var componentHostsRouterOutlet = (component) => {
|
|
16637
17064
|
const componentDef = Reflect.get(component, "\u0275cmp");
|
|
16638
|
-
if (!
|
|
17065
|
+
if (!isRecord10(componentDef))
|
|
16639
17066
|
return false;
|
|
16640
17067
|
const rawDependencies = componentDef.dependencies;
|
|
16641
17068
|
const dependencies = typeof rawDependencies === "function" ? Reflect.apply(rawDependencies, undefined, []) : rawDependencies;
|
|
@@ -16645,7 +17072,7 @@ var componentHostsRouterOutlet = (component) => {
|
|
|
16645
17072
|
if (dependency === null || typeof dependency !== "object" && typeof dependency !== "function")
|
|
16646
17073
|
return false;
|
|
16647
17074
|
const directiveDef = Reflect.get(dependency, "\u0275dir") ?? dependency;
|
|
16648
|
-
if (!
|
|
17075
|
+
if (!isRecord10(directiveDef))
|
|
16649
17076
|
return false;
|
|
16650
17077
|
const { selectors } = directiveDef;
|
|
16651
17078
|
return Array.isArray(selectors) && JSON.stringify(selectors).includes("router-outlet");
|
|
@@ -16675,7 +17102,7 @@ var ensureAngularCompiler = () => {
|
|
|
16675
17102
|
}
|
|
16676
17103
|
return compilerImportPromise;
|
|
16677
17104
|
};
|
|
16678
|
-
var readAngularPageModule = (value) =>
|
|
17105
|
+
var readAngularPageModule = (value) => isRecord10(value) ? value : null;
|
|
16679
17106
|
var resolveAngularSsrOutDir = (projectRoot = process.cwd(), configuredOutDir = process.env.ABSOLUTE_ANGULAR_SSR_OUTDIR) => configuredOutDir ?? join10(projectRoot, ".absolutejs", "runtime", "angular-ssr");
|
|
16680
17107
|
var createAngularRuntimeCacheBuster = () => `${Date.now().toString(BASE_36_RADIX)}.${Math.random().toString(BASE_36_RADIX).substring(2, RANDOM_ID_END_INDEX)}`;
|
|
16681
17108
|
var existingNodeModulesLinkMatches = async (nodeModulesLink, expectedTarget) => {
|
|
@@ -16760,7 +17187,7 @@ var buildRuntimeModuleSpecifier = (modulePath, cacheBuster) => {
|
|
|
16760
17187
|
var withHtmlContentType = (responseInit = {}) => {
|
|
16761
17188
|
const headers = new Headers(responseInit.headers);
|
|
16762
17189
|
if (!headers.has("Content-Type")) {
|
|
16763
|
-
headers.set("Content-Type",
|
|
17190
|
+
headers.set("Content-Type", HTML_CONTENT_TYPE);
|
|
16764
17191
|
}
|
|
16765
17192
|
return { ...responseInit, headers };
|
|
16766
17193
|
};
|
|
@@ -16793,7 +17220,7 @@ var handleAngularPageRequest = async (input) => {
|
|
|
16793
17220
|
],
|
|
16794
17221
|
runtimes: [String(ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION)]
|
|
16795
17222
|
},
|
|
16796
|
-
props:
|
|
17223
|
+
props: isRecord10(input.requestContext) ? input.requestContext : Object.create(null),
|
|
16797
17224
|
request,
|
|
16798
17225
|
status: input.responseInit?.status,
|
|
16799
17226
|
route: () => {
|
|
@@ -16830,18 +17257,27 @@ var handleAngularPageRequest = async (input) => {
|
|
|
16830
17257
|
});
|
|
16831
17258
|
try {
|
|
16832
17259
|
const handlerCallsite = options?.collectStreamingSlots === true ? undefined : getCurrentRouteRegistrationCallsite() ?? captureStreamingSlotWarningCallsite();
|
|
17260
|
+
const baseDeps = await getAngularDeps();
|
|
17261
|
+
const runtimePagePath = await resolveRuntimeAngularModulePath(resolvedPagePath);
|
|
17262
|
+
const importedPageModule = await import(buildRuntimeModuleSpecifier(runtimePagePath.path, runtimePagePath.cacheBuster));
|
|
17263
|
+
const pageModule = readAngularPageModule(importedPageModule);
|
|
17264
|
+
if (!pageModule) {
|
|
17265
|
+
throw new Error(`Invalid Angular page module: ${resolvedPagePath}`);
|
|
17266
|
+
}
|
|
17267
|
+
const PageComponent = resolvePageComponent(pageModule);
|
|
17268
|
+
if (!isAngularComponent(PageComponent)) {
|
|
17269
|
+
throw new Error(`Angular page module must export an Angular component: ${resolvedPagePath}`);
|
|
17270
|
+
}
|
|
17271
|
+
if (isUnmatchedColocatedRoute({
|
|
17272
|
+
handlerProviders: input.providers,
|
|
17273
|
+
pageModule,
|
|
17274
|
+
request,
|
|
17275
|
+
route: getCurrentAbsoluteRoute(request),
|
|
17276
|
+
runtimeBaseHref
|
|
17277
|
+
})) {
|
|
17278
|
+
return withPageCacheHeaders(await renderSpaNotFoundResponse(request), request);
|
|
17279
|
+
}
|
|
16833
17280
|
const renderPageResponse = async () => {
|
|
16834
|
-
const baseDeps = await getAngularDeps();
|
|
16835
|
-
const runtimePagePath = await resolveRuntimeAngularModulePath(resolvedPagePath);
|
|
16836
|
-
const importedPageModule = await import(buildRuntimeModuleSpecifier(runtimePagePath.path, runtimePagePath.cacheBuster));
|
|
16837
|
-
const pageModule = readAngularPageModule(importedPageModule);
|
|
16838
|
-
if (!pageModule) {
|
|
16839
|
-
throw new Error(`Invalid Angular page module: ${resolvedPagePath}`);
|
|
16840
|
-
}
|
|
16841
|
-
const PageComponent = resolvePageComponent(pageModule);
|
|
16842
|
-
if (!isAngularComponent(PageComponent)) {
|
|
16843
|
-
throw new Error(`Angular page module must export an Angular component: ${resolvedPagePath}`);
|
|
16844
|
-
}
|
|
16845
17281
|
const hasIslands = typeof pageModule.__ABSOLUTE_PAGE_HAS_ISLANDS__ === "boolean" ? pageModule.__ABSOLUTE_PAGE_HAS_ISLANDS__ : false;
|
|
16846
17282
|
const usesLegacyAnimations = pageModule.__ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ === true;
|
|
16847
17283
|
const deps = baseDeps;
|
|
@@ -16881,7 +17317,7 @@ var handleAngularPageRequest = async (input) => {
|
|
|
16881
17317
|
return withPageCacheHeaders(conventionResponse, request);
|
|
16882
17318
|
}
|
|
16883
17319
|
return withPageCacheHeaders(new Response(ssrErrorPage("angular", error), {
|
|
16884
|
-
headers: { "Content-Type":
|
|
17320
|
+
headers: { "Content-Type": HTML_CONTENT_TYPE },
|
|
16885
17321
|
status: 500
|
|
16886
17322
|
}), request);
|
|
16887
17323
|
}
|
|
@@ -17413,5 +17849,5 @@ export {
|
|
|
17413
17849
|
withPendingTask
|
|
17414
17850
|
};
|
|
17415
17851
|
|
|
17416
|
-
//# debugId=
|
|
17852
|
+
//# debugId=D3C5CBDE25ADE9C364756E2164756E21
|
|
17417
17853
|
//# sourceMappingURL=index.js.map
|