@absolutejs/absolute 0.16.4 → 0.16.6
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/dist/dev/client/cssUtils.ts +2 -2
- package/dist/dev/client/domState.ts +1 -1
- package/dist/dev/client/errorOverlay.ts +1 -1
- package/dist/dev/client/handlers/html.ts +2 -2
- package/dist/dev/client/handlers/htmx.ts +2 -2
- package/dist/dev/client/hmrClient.ts +2 -2
- package/dist/index.js +47 -11
- package/dist/index.js.map +16 -15
- package/dist/react/hooks/index.js.map +1 -1
- package/dist/react/index.js +4 -4
- package/dist/react/index.js.map +3 -3
- package/dist/{cli → src/cli}/interactive.d.ts +1 -1
- package/dist/{cli → src/cli}/utils.d.ts +1 -1
- package/dist/{core → src/core}/build.d.ts +1 -1
- package/dist/{core → src/core}/devBuild.d.ts +1 -1
- package/dist/src/core/pageHandlers.d.ts +5 -0
- package/dist/{dev → src/dev}/clientManager.d.ts +2 -2
- package/dist/{dev → src/dev}/configResolver.d.ts +1 -1
- package/dist/{dev → src/dev}/fileWatcher.d.ts +1 -1
- package/dist/{dev → src/dev}/pathUtils.d.ts +1 -1
- package/dist/{dev → src/dev}/rebuildTrigger.d.ts +1 -1
- package/dist/{dev → src/dev}/webSocket.d.ts +1 -1
- package/dist/{index.d.ts → src/index.d.ts} +1 -1
- package/dist/src/react/hooks/index.d.ts +2 -0
- package/dist/{react → src/react}/hooks/useMediaQuery.d.ts +1 -1
- package/dist/{react → src/react}/pageHandler.d.ts +1 -1
- package/dist/{svelte → src/svelte}/pageHandler.d.ts +1 -1
- package/dist/{vue → src/vue}/pageHandler.d.ts +1 -1
- package/dist/svelte/index.js +60 -57
- package/dist/svelte/index.js.map +5 -5
- package/dist/types/build.d.ts +2 -2
- package/dist/types/userAgentTypes.d.ts +1 -1
- package/dist/vue/index.js +4 -4
- package/dist/vue/index.js.map +3 -3
- package/package.json +8 -8
- package/tsconfig.build.json +1 -2
- package/types/build.ts +40 -0
- package/types/cli.ts +20 -0
- package/types/client.ts +111 -0
- package/types/index.ts +5 -0
- package/types/mediaQuery.ts +10 -0
- package/types/messages.ts +205 -0
- package/types/react.ts +4 -0
- package/types/svelte.ts +4 -0
- package/types/userAgentTypes.ts +3 -0
- package/types/vue.ts +4 -0
- package/types/websocket.ts +12 -0
- package/types/window-globals.ts +53 -0
- package/dist/core/pageHandlers.d.ts +0 -2
- package/dist/react/hooks/index.d.ts +0 -2
- package/react.d.ts +0 -1
- package/svelte.d.ts +0 -1
- package/vue.d.ts +0 -1
- /package/dist/{build → src/build}/buildReactVendor.d.ts +0 -0
- /package/dist/{build → src/build}/compileSvelte.d.ts +0 -0
- /package/dist/{build → src/build}/compileVue.d.ts +0 -0
- /package/dist/{build → src/build}/generateManifest.d.ts +0 -0
- /package/dist/{build → src/build}/generateReactIndexes.d.ts +0 -0
- /package/dist/{build → src/build}/htmlScriptHMRPlugin.d.ts +0 -0
- /package/dist/{build → src/build}/outputLogs.d.ts +0 -0
- /package/dist/{build → src/build}/rewriteReactImports.d.ts +0 -0
- /package/dist/{build → src/build}/scanEntryPoints.d.ts +0 -0
- /package/dist/{build → src/build}/updateAssetPaths.d.ts +0 -0
- /package/dist/{build → src/build}/wrapHTMLScript.d.ts +0 -0
- /package/dist/{cli → src/cli}/index.d.ts +0 -0
- /package/dist/{cli → src/cli}/scripts/dev.d.ts +0 -0
- /package/dist/{constants.d.ts → src/constants.d.ts} +0 -0
- /package/dist/{core → src/core}/devVendorPaths.d.ts +0 -0
- /package/dist/{core → src/core}/index.d.ts +0 -0
- /package/dist/{core → src/core}/lookup.d.ts +0 -0
- /package/dist/{dev → src/dev}/assetStore.d.ts +0 -0
- /package/dist/{dev → src/dev}/buildHMRClient.d.ts +0 -0
- /package/dist/{dev → src/dev}/dependencyGraph.d.ts +0 -0
- /package/dist/{dev → src/dev}/fileHashTracker.d.ts +0 -0
- /package/dist/{dev → src/dev}/moduleMapper.d.ts +0 -0
- /package/dist/{dev → src/dev}/moduleVersionTracker.d.ts +0 -0
- /package/dist/{dev → src/dev}/reactComponentClassifier.d.ts +0 -0
- /package/dist/{dev → src/dev}/simpleHTMLHMR.d.ts +0 -0
- /package/dist/{dev → src/dev}/simpleHTMXHMR.d.ts +0 -0
- /package/dist/{dev → src/dev}/simpleSvelteHMR.d.ts +0 -0
- /package/dist/{dev → src/dev}/simpleVueHMR.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/hmr.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/index.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/networking.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/pageRouter.d.ts +0 -0
- /package/dist/{react → src/react}/index.d.ts +0 -0
- /package/dist/{svelte → src/svelte}/index.d.ts +0 -0
- /package/dist/{svelte → src/svelte}/renderToPipeableStream.d.ts +0 -0
- /package/dist/{svelte → src/svelte}/renderToReadableStream.d.ts +0 -0
- /package/dist/{svelte → src/svelte}/renderToString.d.ts +0 -0
- /package/dist/{utils → src/utils}/cleanup.d.ts +0 -0
- /package/dist/{utils → src/utils}/commonAncestor.d.ts +0 -0
- /package/dist/{utils → src/utils}/escapeScriptContent.d.ts +0 -0
- /package/dist/{utils → src/utils}/generateHeadElement.d.ts +0 -0
- /package/dist/{utils → src/utils}/getDurationString.d.ts +0 -0
- /package/dist/{utils → src/utils}/getEnv.d.ts +0 -0
- /package/dist/{utils → src/utils}/getRegisterClientScript.d.ts +0 -0
- /package/dist/{utils → src/utils}/index.d.ts +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{utils → src/utils}/networking.d.ts +0 -0
- /package/dist/{utils → src/utils}/normalizePath.d.ts +0 -0
- /package/dist/{utils → src/utils}/registerClientScript.d.ts +0 -0
- /package/dist/{utils → src/utils}/ssrErrorPage.d.ts +0 -0
- /package/dist/{utils → src/utils}/stringModifiers.d.ts +0 -0
- /package/dist/{utils → src/utils}/userAgentFunctions.d.ts +0 -0
- /package/dist/{utils → src/utils}/validateSafePath.d.ts +0 -0
- /package/dist/{vue → src/vue}/index.d.ts +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/react/hooks/useMediaQuery.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { createContext, useContext, useSyncExternalStore } from 'react';\nimport { Breakpoint, Breakpoints } from '
|
|
5
|
+
"import { createContext, useContext, useSyncExternalStore } from 'react';\nimport { Breakpoint, Breakpoints } from '../../../types/mediaQuery';\nimport { UserAgentType } from '../../../types/userAgentTypes';\n\nconst UserAgentContext = createContext<UserAgentType | null>(null);\n\nexport const UserAgentProvider = UserAgentContext.Provider;\n\nconst useUserAgentType = (): UserAgentType => {\n\tconst context = useContext(UserAgentContext);\n\tif (context === null) {\n\t\tthrow new Error(\n\t\t\t'useMediaQuery must be used within a UserAgentProvider'\n\t\t);\n\t}\n\n\treturn context;\n};\n\nconst defaultBreakpoints: Breakpoints = {\n\txs: 0,\n\tsm: 640,\n\tmd: 768,\n\tlg: 1024,\n\txl: 1280,\n\t'2xl': 1536\n};\n\nconst userAgentInitialWidth: Record<UserAgentType, number> = {\n\tbot: 1024,\n\tcar: 768,\n\tconsole: 1024,\n\tdesktop: 1024,\n\tiot: 640,\n\tother: 768,\n\tphone: 375,\n\ttablet: 768,\n\ttv: 1280\n};\n\nconst subscribers = new Set<() => void>();\nlet width = typeof window !== 'undefined' ? window.innerWidth : 0;\nlet isListening = false;\n\nconst ensureListener = () => {\n\tif (isListening || typeof window === 'undefined') return;\n\tisListening = true;\n\n\tlet isTicking = false;\n\tconst onResize = () => {\n\t\tif (isTicking) return;\n\t\tisTicking = true;\n\t\trequestAnimationFrame(() => {\n\t\t\tisTicking = false;\n\t\t\twidth = window.innerWidth;\n\t\t\tsubscribers.forEach((notify) => notify());\n\t\t});\n\t};\n\n\twindow.addEventListener('resize', onResize, { passive: true });\n};\n\nconst subscribe = (callback: () => void) => {\n\tensureListener();\n\tsubscribers.add(callback);\n\treturn () => subscribers.delete(callback);\n};\n\nconst getViewportWidth = () => width;\n\nconst computeBreakpoint = (widthValue: number, breakpoints: Breakpoints) => {\n\tif (widthValue < breakpoints.sm) return 'xs';\n\tif (widthValue < breakpoints.md) return 'sm';\n\tif (widthValue < breakpoints.lg) return 'md';\n\tif (widthValue < breakpoints.xl) return 'lg';\n\tif (widthValue < breakpoints['2xl']) return 'xl';\n\treturn '2xl';\n};\n\nexport const useMediaQuery = (\n\tcustomBreakpoints: Breakpoints = defaultBreakpoints\n) => {\n\tconst userAgentType = useUserAgentType();\n\tconst getServerWidth = () => userAgentInitialWidth[userAgentType];\n\n\tconst currentWidth = useSyncExternalStore(\n\t\tsubscribe,\n\t\tgetViewportWidth,\n\t\tgetServerWidth\n\t);\n\n\tconst breakpoint = computeBreakpoint(currentWidth, customBreakpoints);\n\n\tconst isSizeOrGreater = (target: Breakpoint) =>\n\t\tcustomBreakpoints[breakpoint] >= customBreakpoints[target];\n\n\tconst isSizeOrLess = (target: Breakpoint) =>\n\t\tcustomBreakpoints[breakpoint] <= customBreakpoints[target];\n\n\treturn { breakpoint, isSizeOrGreater, isSizeOrLess };\n};\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;AAAA;AAIA,IAAM,mBAAmB,cAAoC,IAAI;AAE1D,IAAM,oBAAoB,iBAAiB;AAElD,IAAM,mBAAmB,MAAqB;AAAA,EAC7C,MAAM,UAAU,WAAW,gBAAgB;AAAA,EAC3C,IAAI,YAAY,MAAM;AAAA,IACrB,MAAM,IAAI,MACT,uDACD;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;AAGR,IAAM,qBAAkC;AAAA,EACvC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACR;AAEA,IAAM,wBAAuD;AAAA,EAC5D,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,EACT,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,IAAI;AACL;AAEA,IAAM,cAAc,IAAI;AACxB,IAAI,QAAQ,OAAO,WAAW,cAAc,OAAO,aAAa;AAChE,IAAI,cAAc;AAElB,IAAM,iBAAiB,MAAM;AAAA,EAC5B,IAAI,eAAe,OAAO,WAAW;AAAA,IAAa;AAAA,EAClD,cAAc;AAAA,EAEd,IAAI,YAAY;AAAA,EAChB,MAAM,WAAW,MAAM;AAAA,IACtB,IAAI;AAAA,MAAW;AAAA,IACf,YAAY;AAAA,IACZ,sBAAsB,MAAM;AAAA,MAC3B,YAAY;AAAA,MACZ,QAAQ,OAAO;AAAA,MACf,YAAY,QAAQ,CAAC,WAAW,OAAO,CAAC;AAAA,KACxC;AAAA;AAAA,EAGF,OAAO,iBAAiB,UAAU,UAAU,EAAE,SAAS,KAAK,CAAC;AAAA;AAG9D,IAAM,YAAY,CAAC,aAAyB;AAAA,EAC3C,eAAe;AAAA,EACf,YAAY,IAAI,QAAQ;AAAA,EACxB,OAAO,MAAM,YAAY,OAAO,QAAQ;AAAA;AAGzC,IAAM,mBAAmB,MAAM;AAE/B,IAAM,oBAAoB,CAAC,YAAoB,gBAA6B;AAAA,EAC3E,IAAI,aAAa,YAAY;AAAA,IAAI,OAAO;AAAA,EACxC,IAAI,aAAa,YAAY;AAAA,IAAI,OAAO;AAAA,EACxC,IAAI,aAAa,YAAY;AAAA,IAAI,OAAO;AAAA,EACxC,IAAI,aAAa,YAAY;AAAA,IAAI,OAAO;AAAA,EACxC,IAAI,aAAa,YAAY;AAAA,IAAQ,OAAO;AAAA,EAC5C,OAAO;AAAA;AAGD,IAAM,gBAAgB,CAC5B,oBAAiC,uBAC7B;AAAA,EACJ,MAAM,gBAAgB,iBAAiB;AAAA,EACvC,MAAM,iBAAiB,MAAM,sBAAsB;AAAA,EAEnD,MAAM,eAAe,qBACpB,WACA,kBACA,cACD;AAAA,EAEA,MAAM,aAAa,kBAAkB,cAAc,iBAAiB;AAAA,EAEpE,MAAM,kBAAkB,CAAC,WACxB,kBAAkB,eAAe,kBAAkB;AAAA,EAEpD,MAAM,eAAe,CAAC,WACrB,kBAAkB,eAAe,kBAAkB;AAAA,EAEpD,OAAO,EAAE,YAAY,iBAAiB,aAAa;AAAA;",
|
|
8
8
|
"debugId": "27AC05AE60B974B964756E2164756E21",
|
package/dist/react/index.js
CHANGED
|
@@ -65,13 +65,13 @@ body{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,r
|
|
|
65
65
|
};
|
|
66
66
|
|
|
67
67
|
// src/react/pageHandler.ts
|
|
68
|
-
import { createElement } from "react";
|
|
69
|
-
import { renderToReadableStream as renderReactToReadableStream } from "react-dom/server";
|
|
70
68
|
var handleReactPageRequest = async (PageComponent, index, ...props) => {
|
|
71
69
|
try {
|
|
72
70
|
const [maybeProps] = props;
|
|
71
|
+
const { createElement } = await import("react");
|
|
72
|
+
const { renderToReadableStream } = await import("react-dom/server");
|
|
73
73
|
const element = maybeProps !== undefined ? createElement(PageComponent, maybeProps) : createElement(PageComponent);
|
|
74
|
-
const stream = await
|
|
74
|
+
const stream = await renderToReadableStream(element, {
|
|
75
75
|
bootstrapModules: [index],
|
|
76
76
|
bootstrapScriptContent: maybeProps ? `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps)}` : undefined,
|
|
77
77
|
onError(error) {
|
|
@@ -93,5 +93,5 @@ export {
|
|
|
93
93
|
handleReactPageRequest
|
|
94
94
|
};
|
|
95
95
|
|
|
96
|
-
//# debugId=
|
|
96
|
+
//# debugId=A0AA528CA272E4EF64756E2164756E21
|
|
97
97
|
//# sourceMappingURL=index.js.map
|
package/dist/react/index.js.map
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"sources": ["../src/utils/ssrErrorPage.ts", "../src/react/pageHandler.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"export const ssrErrorPage = (framework: string, error: unknown): string => {\n\tconst frameworkColors: Record<string, string> = {\n\t\tangular: '#dd0031',\n\t\thtml: '#e34c26',\n\t\thtmx: '#1a365d',\n\t\treact: '#61dafb',\n\t\tsvelte: '#ff3e00',\n\t\tvue: '#42b883'\n\t};\n\n\tconst accent = frameworkColors[framework] ?? '#94a3b8';\n\tconst label = framework.charAt(0).toUpperCase() + framework.slice(1);\n\tconst message = error instanceof Error ? error.message : String(error);\n\n\treturn `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>SSR Error - AbsoluteJS</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:\"JetBrains Mono\",\"Fira Code\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}\n.card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}\n.header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}\n.brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}\n.badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}\n.kind{color:#94a3b8;font-size:13px;font-weight:500}\n.content{padding:24px}\n.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}\n.message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}\n.hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}\n</style>\n</head>\n<body>\n<div class=\"card\">\n<div class=\"header\">\n<div style=\"display:flex;align-items:center;gap:12px\">\n<span class=\"brand\">AbsoluteJS</span>\n<span class=\"badge\">${label}</span>\n</div>\n<span class=\"kind\">Server Render Error</span>\n</div>\n<div class=\"content\">\n<div class=\"label\">What went wrong</div>\n<pre class=\"message\">${message.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')}</pre>\n<div class=\"hint\">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>\n</div>\n</div>\n</body>\n</html>`;\n};\n",
|
|
6
|
-
"import { ComponentType as ReactComponent
|
|
6
|
+
"import type { ComponentType as ReactComponent } from 'react';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\n\nexport const handleReactPageRequest = async <\n\tProps extends Record<string, unknown> = Record<never, never>\n>(\n\tPageComponent: ReactComponent<Props>,\n\tindex: string,\n\t...props: keyof Props extends never ? [] : [props: Props]\n) => {\n\ttry {\n\t\tconst [maybeProps] = props;\n\t\tconst { createElement } = await import('react');\n\t\tconst { renderToReadableStream } = await import('react-dom/server');\n\n\t\tconst element =\n\t\t\tmaybeProps !== undefined\n\t\t\t\t? createElement(PageComponent, maybeProps)\n\t\t\t\t: createElement(PageComponent);\n\n\t\tconst stream = await renderToReadableStream(element, {\n\t\t\tbootstrapModules: [index],\n\t\t\tbootstrapScriptContent: maybeProps\n\t\t\t\t? `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps)}`\n\t\t\t\t: undefined,\n\t\t\tonError(error: unknown) {\n\t\t\t\tconsole.error('[SSR] React streaming error:', error);\n\t\t\t}\n\t\t});\n\n\t\treturn new Response(stream, {\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('[SSR] React render error:', error);\n\n\t\treturn new Response(ssrErrorPage('react', error), {\n\t\t\tstatus: 500,\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t}\n};\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": ";;;;;;;;;;;;;;;IAAa,eAAe,CAAC,WAAmB,UAA2B;AAAA,EAC1E,MAAM,kBAA0C;AAAA,IAC/C,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,EACN;AAAA,EAEA,MAAM,SAAS,gBAAgB,cAAc;AAAA,EAC7C,MAAM,QAAQ,UAAU,OAAO,CAAC,EAAE,YAAY,IAAI,UAAU,MAAM,CAAC;AAAA,EACnE,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EAErE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sFAY8E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAahE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAMC,QAAQ,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": ";;;;;;;;;;;;;;;IAAa,eAAe,CAAC,WAAmB,UAA2B;AAAA,EAC1E,MAAM,kBAA0C;AAAA,IAC/C,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,EACN;AAAA,EAEA,MAAM,SAAS,gBAAgB,cAAc;AAAA,EAC7C,MAAM,QAAQ,UAAU,OAAO,CAAC,EAAE,YAAY,IAAI,UAAU,MAAM,CAAC;AAAA,EACnE,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EAErE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sFAY8E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAahE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAMC,QAAQ,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC1CzF,IAAM,yBAAyB,OAGrC,eACA,UACG,UACC;AAAA,EACJ,IAAI;AAAA,IACH,OAAO,cAAc;AAAA,IACrB,QAAQ,kBAAkB,MAAa;AAAA,IACvC,QAAQ,2BAA2B,MAAa;AAAA,IAEhD,MAAM,UACL,eAAe,YACZ,cAAc,eAAe,UAAU,IACvC,cAAc,aAAa;AAAA,IAE/B,MAAM,SAAS,MAAM,uBAAuB,SAAS;AAAA,MACpD,kBAAkB,CAAC,KAAK;AAAA,MACxB,wBAAwB,aACrB,4BAA4B,KAAK,UAAU,UAAU,MACrD;AAAA,MACH,OAAO,CAAC,OAAgB;AAAA,QACvB,QAAQ,MAAM,gCAAgC,KAAK;AAAA;AAAA,IAErD,CAAC;AAAA,IAED,OAAO,IAAI,SAAS,QAAQ;AAAA,MAC3B,SAAS,EAAE,gBAAgB,YAAY;AAAA,IACxC,CAAC;AAAA,IACA,OAAO,OAAO;AAAA,IACf,QAAQ,MAAM,6BAA6B,KAAK;AAAA,IAEhD,OAAO,IAAI,SAAS,aAAa,SAAS,KAAK,GAAG;AAAA,MACjD,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,YAAY;AAAA,IACxC,CAAC;AAAA;AAAA;",
|
|
9
|
+
"debugId": "A0AA528CA272E4EF64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { Actions, InteractiveHandler } from '
|
|
1
|
+
import type { Actions, InteractiveHandler } from '../../types/cli';
|
|
2
2
|
export declare const createInteractiveHandler: (actions: Actions) => InteractiveHandler;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DbScripts } from '
|
|
1
|
+
import type { DbScripts } from '../../types/cli';
|
|
2
2
|
export declare const isWSLEnvironment: () => boolean;
|
|
3
3
|
export declare const COMPOSE_PATH = "db/docker-compose.db.yml";
|
|
4
4
|
export declare const DEFAULT_SERVER_ENTRY = "src/backend/server.ts";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { BuildConfig } from '
|
|
1
|
+
import type { BuildConfig } from '../../types/build';
|
|
2
2
|
export declare const build: ({ buildDirectory, assetsDirectory, publicDirectory, reactDirectory, htmlDirectory, htmxDirectory, angularDirectory, svelteDirectory, vueDirectory, tailwind, options, incrementalFiles }: BuildConfig) => Promise<Record<string, string>>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { handleReactPageRequest } from '../react/pageHandler';
|
|
2
|
+
export { handleSveltePageRequest } from '../svelte/pageHandler';
|
|
3
|
+
export { handleVuePageRequest } from '../vue/pageHandler';
|
|
4
|
+
export declare const handleHTMLPageRequest: (pagePath: string) => Bun.BunFile;
|
|
5
|
+
export declare const handleHTMXPageRequest: (pagePath: string) => Bun.BunFile;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { FSWatcher } from 'fs';
|
|
2
2
|
import { type DependencyGraph } from './dependencyGraph';
|
|
3
3
|
import { type ModuleVersions } from './moduleVersionTracker';
|
|
4
|
-
import type { HMRWebSocket } from '
|
|
5
|
-
import type { BuildConfig } from '
|
|
4
|
+
import type { HMRWebSocket } from '../../types/websocket';
|
|
5
|
+
import type { BuildConfig } from '../../types/build';
|
|
6
6
|
import { type ResolvedBuildPaths } from './configResolver';
|
|
7
7
|
export type HMRState = {
|
|
8
8
|
connectedClients: Set<HMRWebSocket>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BuildConfig } from '
|
|
1
|
+
import type { BuildConfig } from '../../types/build';
|
|
2
2
|
/** Normalize and default build paths so HMR works outside the example app. */
|
|
3
3
|
export declare const resolveBuildPaths: (config: BuildConfig) => {
|
|
4
4
|
buildDir: string;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { BuildConfig } from '
|
|
1
|
+
import type { BuildConfig } from '../../types/build';
|
|
2
2
|
import type { HMRState } from './clientManager';
|
|
3
3
|
export declare const startFileWatching: (state: HMRState, config: BuildConfig, onFileChange: (filePath: string) => void) => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BuildConfig } from '
|
|
1
|
+
import { BuildConfig } from '../../types/build';
|
|
2
2
|
import type { ResolvedBuildPaths } from './configResolver';
|
|
3
3
|
export declare const getWatchPaths: (config: BuildConfig, resolved?: ResolvedBuildPaths) => string[];
|
|
4
4
|
export declare const shouldIgnorePath: (path: string) => boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BuildConfig } from '
|
|
1
|
+
import type { BuildConfig } from '../../types/build';
|
|
2
2
|
import type { HMRState } from './clientManager';
|
|
3
3
|
export declare const queueFileChange: (state: HMRState, filePath: string, config: BuildConfig, onRebuildComplete: (result: {
|
|
4
4
|
manifest: Record<string, string>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { HMRState } from './clientManager';
|
|
2
|
-
import type { HMRWebSocket } from '
|
|
2
|
+
import type { HMRWebSocket } from '../../types/websocket';
|
|
3
3
|
export declare const handleClientConnect: (state: HMRState, client: HMRWebSocket, manifest: Record<string, string>) => void;
|
|
4
4
|
export declare const handleClientDisconnect: (state: HMRState, client: HMRWebSocket) => void;
|
|
5
5
|
export declare const handleHMRMessage: (state: HMRState, client: HMRWebSocket, message: unknown) => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Breakpoint, Breakpoints } from '
|
|
1
|
+
import { Breakpoint, Breakpoints } from '../../../types/mediaQuery';
|
|
2
2
|
export declare const UserAgentProvider: import("react").Provider<"bot" | "phone" | "tablet" | "tv" | "console" | "car" | "iot" | "desktop" | "other" | null>;
|
|
3
3
|
export declare const useMediaQuery: (customBreakpoints?: Breakpoints) => {
|
|
4
4
|
breakpoint: string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { ComponentType as ReactComponent } from 'react';
|
|
1
|
+
import type { ComponentType as ReactComponent } from 'react';
|
|
2
2
|
export declare const handleReactPageRequest: <Props extends Record<string, unknown> = Record<never, never>>(PageComponent: ReactComponent<Props>, index: string, ...props: keyof Props extends never ? [] : [props: Props]) => Promise<Response>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component as SvelteComponent } from 'svelte';
|
|
1
|
+
import type { Component as SvelteComponent } from 'svelte';
|
|
2
2
|
export type HandleSveltePageRequest = {
|
|
3
3
|
(PageComponent: SvelteComponent<Record<string, never>>, pagePath: string, indexPath: string): Promise<Response>;
|
|
4
4
|
<P extends Record<string, unknown>>(PageComponent: SvelteComponent<P>, pagePath: string, indexPath: string, props: P): Promise<Response>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Component as VueComponent } from 'vue';
|
|
1
|
+
import type { Component as VueComponent } from 'vue';
|
|
2
2
|
export declare const handleVuePageRequest: <Props extends Record<string, unknown> = Record<never, never>>(_PageComponent: VueComponent<Props>, pagePath: string, indexPath: string, headTag?: `<head>${string}</head>`, ...props: keyof Props extends never ? [] : [props: Props]) => Promise<Response>;
|
package/dist/svelte/index.js
CHANGED
|
@@ -12,6 +12,58 @@ var __export = (target, all) => {
|
|
|
12
12
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
13
|
var __require = import.meta.require;
|
|
14
14
|
|
|
15
|
+
// src/utils/ssrErrorPage.ts
|
|
16
|
+
var ssrErrorPage = (framework, error) => {
|
|
17
|
+
const frameworkColors = {
|
|
18
|
+
angular: "#dd0031",
|
|
19
|
+
html: "#e34c26",
|
|
20
|
+
htmx: "#1a365d",
|
|
21
|
+
react: "#61dafb",
|
|
22
|
+
svelte: "#ff3e00",
|
|
23
|
+
vue: "#42b883"
|
|
24
|
+
};
|
|
25
|
+
const accent = frameworkColors[framework] ?? "#94a3b8";
|
|
26
|
+
const label = framework.charAt(0).toUpperCase() + framework.slice(1);
|
|
27
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
28
|
+
return `<!DOCTYPE html>
|
|
29
|
+
<html>
|
|
30
|
+
<head>
|
|
31
|
+
<meta charset="utf-8">
|
|
32
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
33
|
+
<title>SSR Error - AbsoluteJS</title>
|
|
34
|
+
<style>
|
|
35
|
+
*{margin:0;padding:0;box-sizing:border-box}
|
|
36
|
+
body{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:"JetBrains Mono","Fira Code",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}
|
|
37
|
+
.card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}
|
|
38
|
+
.header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}
|
|
39
|
+
.brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
|
|
40
|
+
.badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}
|
|
41
|
+
.kind{color:#94a3b8;font-size:13px;font-weight:500}
|
|
42
|
+
.content{padding:24px}
|
|
43
|
+
.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
|
|
44
|
+
.message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}
|
|
45
|
+
.hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}
|
|
46
|
+
</style>
|
|
47
|
+
</head>
|
|
48
|
+
<body>
|
|
49
|
+
<div class="card">
|
|
50
|
+
<div class="header">
|
|
51
|
+
<div style="display:flex;align-items:center;gap:12px">
|
|
52
|
+
<span class="brand">AbsoluteJS</span>
|
|
53
|
+
<span class="badge">${label}</span>
|
|
54
|
+
</div>
|
|
55
|
+
<span class="kind">Server Render Error</span>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="content">
|
|
58
|
+
<div class="label">What went wrong</div>
|
|
59
|
+
<pre class="message">${message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">")}</pre>
|
|
60
|
+
<div class="hint">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</body>
|
|
64
|
+
</html>`;
|
|
65
|
+
};
|
|
66
|
+
|
|
15
67
|
// src/constants.ts
|
|
16
68
|
var UNFOUND_INDEX = -1, SECONDS_IN_A_MINUTE = 60, MILLISECONDS_IN_A_SECOND = 1000, MILLISECONDS_IN_A_MINUTE, MINUTES_IN_AN_HOUR = 60, HOURS_IN_DAY = 24, MILLISECONDS_IN_A_DAY, TIME_PRECISION = 2, TWO_THIRDS, DEFAULT_PORT = 3000, DEFAULT_CHUNK_SIZE = 16384, BUN_BUILD_WARNING_SUPPRESSION = "wildcard sideEffects are not supported yet";
|
|
17
69
|
var init_constants = __esm(() => {
|
|
@@ -37,6 +89,10 @@ var init_escapeScriptContent = __esm(() => {
|
|
|
37
89
|
});
|
|
38
90
|
|
|
39
91
|
// src/svelte/renderToReadableStream.ts
|
|
92
|
+
var exports_renderToReadableStream = {};
|
|
93
|
+
__export(exports_renderToReadableStream, {
|
|
94
|
+
renderToReadableStream: () => renderToReadableStream
|
|
95
|
+
});
|
|
40
96
|
import { render } from "svelte/server";
|
|
41
97
|
var renderToReadableStream = async (component, props, {
|
|
42
98
|
bootstrapScriptContent,
|
|
@@ -85,58 +141,6 @@ var init_renderToReadableStream = __esm(() => {
|
|
|
85
141
|
init_escapeScriptContent();
|
|
86
142
|
});
|
|
87
143
|
|
|
88
|
-
// src/utils/ssrErrorPage.ts
|
|
89
|
-
var ssrErrorPage = (framework, error) => {
|
|
90
|
-
const frameworkColors = {
|
|
91
|
-
angular: "#dd0031",
|
|
92
|
-
html: "#e34c26",
|
|
93
|
-
htmx: "#1a365d",
|
|
94
|
-
react: "#61dafb",
|
|
95
|
-
svelte: "#ff3e00",
|
|
96
|
-
vue: "#42b883"
|
|
97
|
-
};
|
|
98
|
-
const accent = frameworkColors[framework] ?? "#94a3b8";
|
|
99
|
-
const label = framework.charAt(0).toUpperCase() + framework.slice(1);
|
|
100
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
101
|
-
return `<!DOCTYPE html>
|
|
102
|
-
<html>
|
|
103
|
-
<head>
|
|
104
|
-
<meta charset="utf-8">
|
|
105
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
106
|
-
<title>SSR Error - AbsoluteJS</title>
|
|
107
|
-
<style>
|
|
108
|
-
*{margin:0;padding:0;box-sizing:border-box}
|
|
109
|
-
body{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:"JetBrains Mono","Fira Code",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}
|
|
110
|
-
.card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}
|
|
111
|
-
.header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}
|
|
112
|
-
.brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
|
|
113
|
-
.badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}
|
|
114
|
-
.kind{color:#94a3b8;font-size:13px;font-weight:500}
|
|
115
|
-
.content{padding:24px}
|
|
116
|
-
.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
|
|
117
|
-
.message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}
|
|
118
|
-
.hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}
|
|
119
|
-
</style>
|
|
120
|
-
</head>
|
|
121
|
-
<body>
|
|
122
|
-
<div class="card">
|
|
123
|
-
<div class="header">
|
|
124
|
-
<div style="display:flex;align-items:center;gap:12px">
|
|
125
|
-
<span class="brand">AbsoluteJS</span>
|
|
126
|
-
<span class="badge">${label}</span>
|
|
127
|
-
</div>
|
|
128
|
-
<span class="kind">Server Render Error</span>
|
|
129
|
-
</div>
|
|
130
|
-
<div class="content">
|
|
131
|
-
<div class="label">What went wrong</div>
|
|
132
|
-
<pre class="message">${message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">")}</pre>
|
|
133
|
-
<div class="hint">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>
|
|
134
|
-
</div>
|
|
135
|
-
</div>
|
|
136
|
-
</body>
|
|
137
|
-
</html>`;
|
|
138
|
-
};
|
|
139
|
-
|
|
140
144
|
// src/svelte/pageHandler.ts
|
|
141
145
|
var exports_pageHandler = {};
|
|
142
146
|
__export(exports_pageHandler, {
|
|
@@ -145,7 +149,8 @@ __export(exports_pageHandler, {
|
|
|
145
149
|
var handleSveltePageRequest = async (_PageComponent, pagePath, indexPath, props) => {
|
|
146
150
|
try {
|
|
147
151
|
const { default: ImportedPageComponent } = await import(pagePath);
|
|
148
|
-
const
|
|
152
|
+
const { renderToReadableStream: renderToReadableStream2 } = await Promise.resolve().then(() => (init_renderToReadableStream(), exports_renderToReadableStream));
|
|
153
|
+
const stream = await renderToReadableStream2(ImportedPageComponent, props, {
|
|
149
154
|
bootstrapModules: indexPath ? [indexPath] : [],
|
|
150
155
|
bootstrapScriptContent: `window.__INITIAL_PROPS__=${JSON.stringify(props)}`
|
|
151
156
|
});
|
|
@@ -160,9 +165,7 @@ var handleSveltePageRequest = async (_PageComponent, pagePath, indexPath, props)
|
|
|
160
165
|
});
|
|
161
166
|
}
|
|
162
167
|
};
|
|
163
|
-
var init_pageHandler =
|
|
164
|
-
init_renderToReadableStream();
|
|
165
|
-
});
|
|
168
|
+
var init_pageHandler = () => {};
|
|
166
169
|
|
|
167
170
|
// src/svelte/index.ts
|
|
168
171
|
init_pageHandler();
|
|
@@ -172,5 +175,5 @@ export {
|
|
|
172
175
|
handleSveltePageRequest
|
|
173
176
|
};
|
|
174
177
|
|
|
175
|
-
//# debugId=
|
|
178
|
+
//# debugId=91E91FD3885BEC0164756E2164756E21
|
|
176
179
|
//# sourceMappingURL=index.js.map
|
package/dist/svelte/index.js.map
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/
|
|
3
|
+
"sources": ["../src/utils/ssrErrorPage.ts", "../src/constants.ts", "../src/utils/escapeScriptContent.ts", "../src/svelte/renderToReadableStream.ts", "../src/svelte/pageHandler.ts", "../src/svelte/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
+
"export const ssrErrorPage = (framework: string, error: unknown): string => {\n\tconst frameworkColors: Record<string, string> = {\n\t\tangular: '#dd0031',\n\t\thtml: '#e34c26',\n\t\thtmx: '#1a365d',\n\t\treact: '#61dafb',\n\t\tsvelte: '#ff3e00',\n\t\tvue: '#42b883'\n\t};\n\n\tconst accent = frameworkColors[framework] ?? '#94a3b8';\n\tconst label = framework.charAt(0).toUpperCase() + framework.slice(1);\n\tconst message = error instanceof Error ? error.message : String(error);\n\n\treturn `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>SSR Error - AbsoluteJS</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:\"JetBrains Mono\",\"Fira Code\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}\n.card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}\n.header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}\n.brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}\n.badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}\n.kind{color:#94a3b8;font-size:13px;font-weight:500}\n.content{padding:24px}\n.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}\n.message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}\n.hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}\n</style>\n</head>\n<body>\n<div class=\"card\">\n<div class=\"header\">\n<div style=\"display:flex;align-items:center;gap:12px\">\n<span class=\"brand\">AbsoluteJS</span>\n<span class=\"badge\">${label}</span>\n</div>\n<span class=\"kind\">Server Render Error</span>\n</div>\n<div class=\"content\">\n<div class=\"label\">What went wrong</div>\n<pre class=\"message\">${message.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')}</pre>\n<div class=\"hint\">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>\n</div>\n</div>\n</body>\n</html>`;\n};\n",
|
|
5
6
|
"export const UNFOUND_INDEX = -1;\nexport const SECONDS_IN_A_MINUTE = 60;\nexport const MILLISECONDS_IN_A_SECOND = 1000;\nexport const MILLISECONDS_IN_A_MINUTE =\n\tMILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE;\nexport const MINUTES_IN_AN_HOUR = 60;\nexport const HOURS_IN_DAY = 24;\nexport const MILLISECONDS_IN_A_DAY =\n\tMILLISECONDS_IN_A_SECOND *\n\tSECONDS_IN_A_MINUTE *\n\tMINUTES_IN_AN_HOUR *\n\tHOURS_IN_DAY;\nexport const TIME_PRECISION = 2;\nexport const TWO_THIRDS = 2 / 3;\nexport const DEFAULT_PORT = 3000;\nexport const DEFAULT_CHUNK_SIZE = 16_384;\nexport const BUN_BUILD_WARNING_SUPPRESSION =\n\t'wildcard sideEffects are not supported yet';\n",
|
|
6
7
|
"const ESCAPE_LOOKUP: Record<string, string> = {\n\t'\\u2028': '\\\\u2028',\n\t'\\u2029': '\\\\u2029',\n\t'&': '\\\\u0026',\n\t'<': '\\\\u003C',\n\t'>': '\\\\u003E'\n};\n\nconst ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\n\nexport const escapeScriptContent = (content: string) =>\n\tcontent.replace(ESCAPE_REGEX, (char) => {\n\t\tconst escaped = ESCAPE_LOOKUP[char];\n\n\t\treturn escaped !== undefined ? escaped : char;\n\t});\n",
|
|
7
8
|
"import type { Component } from 'svelte';\nimport { render } from 'svelte/server';\nimport { DEFAULT_CHUNK_SIZE } from '../constants';\nimport { escapeScriptContent } from '../utils/escapeScriptContent';\n\nexport type RenderStreamOptions = {\n\tbootstrapScriptContent?: string;\n\tbootstrapScripts?: string[];\n\tbootstrapModules?: string[];\n\tnonce?: string;\n\tonError?: (error: unknown) => void;\n\tprogressiveChunkSize?: number;\n\tsignal?: AbortSignal;\n\theadContent?: string;\n\tbodyContent?: string;\n};\n\nexport const renderToReadableStream = async <\n\tProps extends Record<string, unknown> = Record<string, never>\n>(\n\tcomponent: Component<Props>,\n\tprops?: Props,\n\t{\n\t\tbootstrapScriptContent,\n\t\tbootstrapScripts = [],\n\t\tbootstrapModules = [],\n\t\tnonce,\n\t\tonError = console.error,\n\t\tprogressiveChunkSize = DEFAULT_CHUNK_SIZE,\n\t\tsignal,\n\t\theadContent,\n\t\tbodyContent\n\t}: RenderStreamOptions = {}\n) => {\n\ttry {\n\t\tconst { head, body } =\n\t\t\ttypeof props === 'undefined'\n\t\t\t\t? // @ts-expect-error Svelte's render function can't determine which overload to choose when the component is generic\n\t\t\t\t\trender(component)\n\t\t\t\t: render(component, { props });\n\t\tconst nonceAttr = nonce ? ` nonce=\"${nonce}\"` : '';\n\t\tconst scripts =\n\t\t\t(bootstrapScriptContent\n\t\t\t\t? `<script${nonceAttr}>${escapeScriptContent(bootstrapScriptContent)}</script>`\n\t\t\t\t: '') +\n\t\t\tbootstrapScripts\n\t\t\t\t.map((src) => `<script${nonceAttr} src=\"${src}\"></script>`)\n\t\t\t\t.join('') +\n\t\t\tbootstrapModules\n\t\t\t\t.map(\n\t\t\t\t\t(src) =>\n\t\t\t\t\t\t`<script${nonceAttr} type=\"module\" src=\"${src}\"></script>`\n\t\t\t\t)\n\t\t\t\t.join('');\n\t\tconst encoder = new TextEncoder();\n\t\t// Warning: this encodes the entire document into memory in one buffer\n\t\tconst full = encoder.encode(\n\t\t\t`<!DOCTYPE html><html lang=\"en\"><head>${head}${headContent ?? ''}</head><body>${body}${scripts}${bodyContent ?? ''}</body></html>`\n\t\t);\n\n\t\tlet offset = 0;\n\n\t\treturn new ReadableStream<Uint8Array>({\n\t\t\ttype: 'bytes',\n\t\t\tcancel(reason) {\n\t\t\t\tonError?.(reason);\n\t\t\t},\n\t\t\tpull(controller) {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (offset >= full.length) {\n\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst end = Math.min(\n\t\t\t\t\toffset + progressiveChunkSize,\n\t\t\t\t\tfull.length\n\t\t\t\t);\n\t\t\t\tcontroller.enqueue(full.subarray(offset, end));\n\t\t\t\toffset = end;\n\t\t\t}\n\t\t});\n\t} catch (error) {\n\t\tonError?.(error);\n\t\tthrow error;\n\t}\n};\n",
|
|
8
|
-
"
|
|
9
|
-
"import { Component as SvelteComponent } from 'svelte';\nimport { renderToReadableStream as renderSvelteToReadableStream } from './renderToReadableStream';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\n\n// Declare overloads matching Svelte's own component API to preserve correct type inference\nexport type HandleSveltePageRequest = {\n\t(\n\t\tPageComponent: SvelteComponent<Record<string, never>>,\n\t\tpagePath: string,\n\t\tindexPath: string\n\t): Promise<Response>;\n\t<P extends Record<string, unknown>>(\n\t\tPageComponent: SvelteComponent<P>,\n\t\tpagePath: string,\n\t\tindexPath: string,\n\t\tprops: P\n\t): Promise<Response>;\n};\n\nexport const handleSveltePageRequest: HandleSveltePageRequest = async <\n\tP extends Record<string, unknown>\n>(\n\t_PageComponent: SvelteComponent<P>,\n\tpagePath: string,\n\tindexPath: string,\n\tprops?: P\n) => {\n\ttry {\n\t\tconst { default: ImportedPageComponent } = await import(pagePath);\n\n\t\tconst stream = await renderSvelteToReadableStream(\n\t\t\tImportedPageComponent,\n\t\t\tprops,\n\t\t\t{\n\t\t\t\tbootstrapModules: indexPath ? [indexPath] : [],\n\t\t\t\tbootstrapScriptContent: `window.__INITIAL_PROPS__=${JSON.stringify(\n\t\t\t\t\tprops\n\t\t\t\t)}`\n\t\t\t}\n\t\t);\n\n\t\treturn new Response(stream, {\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('[SSR] Svelte render error:', error);\n\n\t\treturn new Response(ssrErrorPage('svelte', error), {\n\t\t\tstatus: 500,\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t}\n};\n",
|
|
9
|
+
"import type { Component as SvelteComponent } from 'svelte';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\n\n// Declare overloads matching Svelte's own component API to preserve correct type inference\nexport type HandleSveltePageRequest = {\n\t(\n\t\tPageComponent: SvelteComponent<Record<string, never>>,\n\t\tpagePath: string,\n\t\tindexPath: string\n\t): Promise<Response>;\n\t<P extends Record<string, unknown>>(\n\t\tPageComponent: SvelteComponent<P>,\n\t\tpagePath: string,\n\t\tindexPath: string,\n\t\tprops: P\n\t): Promise<Response>;\n};\n\nexport const handleSveltePageRequest: HandleSveltePageRequest = async <\n\tP extends Record<string, unknown>\n>(\n\t_PageComponent: SvelteComponent<P>,\n\tpagePath: string,\n\tindexPath: string,\n\tprops?: P\n) => {\n\ttry {\n\t\tconst { default: ImportedPageComponent } = await import(pagePath);\n\t\tconst { renderToReadableStream } = await import(\n\t\t\t'./renderToReadableStream'\n\t\t);\n\n\t\tconst stream = await renderToReadableStream(\n\t\t\tImportedPageComponent,\n\t\t\tprops,\n\t\t\t{\n\t\t\t\tbootstrapModules: indexPath ? [indexPath] : [],\n\t\t\t\tbootstrapScriptContent: `window.__INITIAL_PROPS__=${JSON.stringify(\n\t\t\t\t\tprops\n\t\t\t\t)}`\n\t\t\t}\n\t\t);\n\n\t\treturn new Response(stream, {\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('[SSR] Svelte render error:', error);\n\n\t\treturn new Response(ssrErrorPage('svelte', error), {\n\t\t\tstatus: 500,\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t}\n};\n",
|
|
10
10
|
"export { handleSveltePageRequest } from './pageHandler';\nexport { renderToReadableStream } from './renderToReadableStream';\n"
|
|
11
11
|
],
|
|
12
|
-
"mappings": ";;;;;;;;;;;;;;;IAAa,gBAAgB,IAChB,sBAAsB,IACtB,2BAA2B,MAC3B,0BAEA,qBAAqB,IACrB,eAAe,IACf,uBAKA,iBAAiB,GACjB,YACA,eAAe,MACf,qBAAqB,OACrB,gCACZ;AAAA;AAAA,EAdY,2BACZ,2BAA2B;AAAA,EAGf,wBACZ,2BACA,sBACA,qBACA;AAAA,EAEY,aAAa,IAAI;AAAA;;;ICbxB,eAQA,cAEO,sBAAsB,CAAC,YACnC,QAAQ,QAAQ,cAAc,CAAC,SAAS;AAAA,EACvC,MAAM,UAAU,cAAc;AAAA,EAE9B,OAAO,YAAY,YAAY,UAAU;AAAA,CACzC;AAAA;AAAA,EAfI,gBAAwC;AAAA,IAC7C,UAAU;AAAA,IACV,UAAU;AAAA,IACV,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AAAA,EAEM,eAAe;AAAA
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "91E91FD3885BEC0164756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
package/dist/types/build.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { build } from '../core/build';
|
|
2
|
-
import { devBuild } from '../core/devBuild';
|
|
1
|
+
import { build } from '../src/core/build';
|
|
2
|
+
import { devBuild } from '../src/core/devBuild';
|
|
3
3
|
export type BuildOptions = {
|
|
4
4
|
preserveIntermediateFiles?: boolean;
|
|
5
5
|
/** When true, build() throws on error instead of exit(1) - used by HMR rebuilds */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { getUserAgentType } from '../utils/userAgentFunctions';
|
|
1
|
+
import { getUserAgentType } from '../src/utils/userAgentFunctions';
|
|
2
2
|
export type UserAgentType = ReturnType<typeof getUserAgentType>;
|
package/dist/vue/index.js
CHANGED
|
@@ -69,16 +69,16 @@ var exports_pageHandler = {};
|
|
|
69
69
|
__export(exports_pageHandler, {
|
|
70
70
|
handleVuePageRequest: () => handleVuePageRequest
|
|
71
71
|
});
|
|
72
|
-
import { createSSRApp, h } from "vue";
|
|
73
|
-
import { renderToWebStream as renderVueToWebStream } from "vue/server-renderer";
|
|
74
72
|
var handleVuePageRequest = async (_PageComponent, pagePath, indexPath, headTag = "<head></head>", ...props) => {
|
|
75
73
|
try {
|
|
76
74
|
const [maybeProps] = props;
|
|
77
75
|
const { default: ImportedPageComponent } = await import(pagePath);
|
|
76
|
+
const { createSSRApp, h } = await import("vue");
|
|
77
|
+
const { renderToWebStream } = await import("vue/server-renderer");
|
|
78
78
|
const app = createSSRApp({
|
|
79
79
|
render: () => h(ImportedPageComponent, maybeProps ?? null)
|
|
80
80
|
});
|
|
81
|
-
const bodyStream =
|
|
81
|
+
const bodyStream = renderToWebStream(app);
|
|
82
82
|
const head = `<!DOCTYPE html><html>${headTag}<body><div id="root">`;
|
|
83
83
|
const tail = `</div><script>window.__INITIAL_PROPS__=${JSON.stringify(maybeProps ?? {})}</script><script type="module" src="${indexPath}"></script></body></html>`;
|
|
84
84
|
const stream = new ReadableStream({
|
|
@@ -110,5 +110,5 @@ export {
|
|
|
110
110
|
handleVuePageRequest
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
-
//# debugId=
|
|
113
|
+
//# debugId=245EA4DF60FFAE7864756E2164756E21
|
|
114
114
|
//# sourceMappingURL=index.js.map
|
package/dist/vue/index.js.map
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
"sources": ["../src/utils/ssrErrorPage.ts", "../src/vue/pageHandler.ts", "../src/vue/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"export const ssrErrorPage = (framework: string, error: unknown): string => {\n\tconst frameworkColors: Record<string, string> = {\n\t\tangular: '#dd0031',\n\t\thtml: '#e34c26',\n\t\thtmx: '#1a365d',\n\t\treact: '#61dafb',\n\t\tsvelte: '#ff3e00',\n\t\tvue: '#42b883'\n\t};\n\n\tconst accent = frameworkColors[framework] ?? '#94a3b8';\n\tconst label = framework.charAt(0).toUpperCase() + framework.slice(1);\n\tconst message = error instanceof Error ? error.message : String(error);\n\n\treturn `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>SSR Error - AbsoluteJS</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:\"JetBrains Mono\",\"Fira Code\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}\n.card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}\n.header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}\n.brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}\n.badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}\n.kind{color:#94a3b8;font-size:13px;font-weight:500}\n.content{padding:24px}\n.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}\n.message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}\n.hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}\n</style>\n</head>\n<body>\n<div class=\"card\">\n<div class=\"header\">\n<div style=\"display:flex;align-items:center;gap:12px\">\n<span class=\"brand\">AbsoluteJS</span>\n<span class=\"badge\">${label}</span>\n</div>\n<span class=\"kind\">Server Render Error</span>\n</div>\n<div class=\"content\">\n<div class=\"label\">What went wrong</div>\n<pre class=\"message\">${message.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')}</pre>\n<div class=\"hint\">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>\n</div>\n</div>\n</body>\n</html>`;\n};\n",
|
|
6
|
-
"import { Component as VueComponent
|
|
6
|
+
"import type { Component as VueComponent } from 'vue';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\n\nexport const handleVuePageRequest = async <\n\tProps extends Record<string, unknown> = Record<never, never>\n>(\n\t_PageComponent: VueComponent<Props>,\n\tpagePath: string,\n\tindexPath: string,\n\theadTag: `<head>${string}</head>` = '<head></head>',\n\t...props: keyof Props extends never ? [] : [props: Props]\n) => {\n\ttry {\n\t\tconst [maybeProps] = props;\n\n\t\tconst { default: ImportedPageComponent } = await import(pagePath);\n\t\tconst { createSSRApp, h } = await import('vue');\n\t\tconst { renderToWebStream } = await import('vue/server-renderer');\n\n\t\tconst app = createSSRApp({\n\t\t\trender: () => h(ImportedPageComponent, maybeProps ?? null)\n\t\t});\n\n\t\tconst bodyStream = renderToWebStream(app);\n\n\t\tconst head = `<!DOCTYPE html><html>${headTag}<body><div id=\"root\">`;\n\t\tconst tail = `</div><script>window.__INITIAL_PROPS__=${JSON.stringify(\n\t\t\tmaybeProps ?? {}\n\t\t)}</script><script type=\"module\" src=\"${indexPath}\"></script></body></html>`;\n\n\t\tconst stream = new ReadableStream({\n\t\t\tstart(controller) {\n\t\t\t\tcontroller.enqueue(head);\n\t\t\t\tconst reader = bodyStream.getReader();\n\t\t\t\tconst pumpLoop = () => {\n\t\t\t\t\treader\n\t\t\t\t\t\t.read()\n\t\t\t\t\t\t.then(({ done, value }) =>\n\t\t\t\t\t\t\tdone\n\t\t\t\t\t\t\t\t? (controller.enqueue(tail), controller.close())\n\t\t\t\t\t\t\t\t: (controller.enqueue(value), pumpLoop())\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.catch((err) => controller.error(err));\n\t\t\t\t};\n\t\t\t\tpumpLoop();\n\t\t\t}\n\t\t});\n\n\t\treturn new Response(stream, {\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('[SSR] Vue render error:', error);\n\n\t\treturn new Response(ssrErrorPage('vue', error), {\n\t\t\tstatus: 500,\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t}\n};\n",
|
|
7
7
|
"export { handleVuePageRequest } from './pageHandler';\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": ";;;;;;;;;;;;;;;IAAa,eAAe,CAAC,WAAmB,UAA2B;AAAA,EAC1E,MAAM,kBAA0C;AAAA,IAC/C,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,EACN;AAAA,EAEA,MAAM,SAAS,gBAAgB,cAAc;AAAA,EAC7C,MAAM,QAAQ,UAAU,OAAO,CAAC,EAAE,YAAY,IAAI,UAAU,MAAM,CAAC;AAAA,EACnE,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EAErE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sFAY8E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAahE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAMC,QAAQ,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": ";;;;;;;;;;;;;;;IAAa,eAAe,CAAC,WAAmB,UAA2B;AAAA,EAC1E,MAAM,kBAA0C;AAAA,IAC/C,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,EACN;AAAA,EAEA,MAAM,SAAS,gBAAgB,cAAc;AAAA,EAC7C,MAAM,QAAQ,UAAU,OAAO,CAAC,EAAE,YAAY,IAAI,UAAU,MAAM,CAAC;AAAA,EACnE,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EAErE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sFAY8E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAahE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAMC,QAAQ,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;IC1CnF,uBAAuB,OAGnC,gBACA,UACA,WACA,UAAoC,oBACjC,UACC;AAAA,EACJ,IAAI;AAAA,IACH,OAAO,cAAc;AAAA,IAErB,QAAQ,SAAS,0BAA0B,MAAa;AAAA,IACxD,QAAQ,cAAc,MAAM,MAAa;AAAA,IACzC,QAAQ,sBAAsB,MAAa;AAAA,IAE3C,MAAM,MAAM,aAAa;AAAA,MACxB,QAAQ,MAAM,EAAE,uBAAuB,cAAc,IAAI;AAAA,IAC1D,CAAC;AAAA,IAED,MAAM,aAAa,kBAAkB,GAAG;AAAA,IAExC,MAAM,OAAO,wBAAwB;AAAA,IACrC,MAAM,OAAO,0CAA0C,KAAK,UAC3D,cAAc,CAAC,CAChB,wCAAwC;AAAA,IAExC,MAAM,SAAS,IAAI,eAAe;AAAA,MACjC,KAAK,CAAC,YAAY;AAAA,QACjB,WAAW,QAAQ,IAAI;AAAA,QACvB,MAAM,SAAS,WAAW,UAAU;AAAA,QACpC,MAAM,WAAW,MAAM;AAAA,UACtB,OACE,KAAK,EACL,KAAK,GAAG,MAAM,YACd,QACI,WAAW,QAAQ,IAAI,GAAG,WAAW,MAAM,MAC3C,WAAW,QAAQ,KAAK,GAAG,SAAS,EACzC,EACC,MAAM,CAAC,QAAQ,WAAW,MAAM,GAAG,CAAC;AAAA;AAAA,QAEvC,SAAS;AAAA;AAAA,IAEX,CAAC;AAAA,IAED,OAAO,IAAI,SAAS,QAAQ;AAAA,MAC3B,SAAS,EAAE,gBAAgB,YAAY;AAAA,IACxC,CAAC;AAAA,IACA,OAAO,OAAO;AAAA,IACf,QAAQ,MAAM,2BAA2B,KAAK;AAAA,IAE9C,OAAO,IAAI,SAAS,aAAa,OAAO,KAAK,GAAG;AAAA,MAC/C,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,YAAY;AAAA,IACxC,CAAC;AAAA;AAAA;AAAA;;;ACzDH;",
|
|
10
|
+
"debugId": "245EA4DF60FFAE7864756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/package.json
CHANGED
|
@@ -39,23 +39,23 @@
|
|
|
39
39
|
"license": "BSL-1.1",
|
|
40
40
|
"exports": {
|
|
41
41
|
".": {
|
|
42
|
-
"types": "./dist/index.d.ts",
|
|
42
|
+
"types": "./dist/src/index.d.ts",
|
|
43
43
|
"import": "./dist/index.js"
|
|
44
44
|
},
|
|
45
45
|
"./react": {
|
|
46
|
-
"types": "./dist/react/index.d.ts",
|
|
46
|
+
"types": "./dist/src/react/index.d.ts",
|
|
47
47
|
"import": "./dist/react/index.js"
|
|
48
48
|
},
|
|
49
49
|
"./react/hooks": {
|
|
50
|
-
"types": "./dist/react/hooks/index.d.ts",
|
|
50
|
+
"types": "./dist/src/react/hooks/index.d.ts",
|
|
51
51
|
"import": "./dist/react/hooks/index.js"
|
|
52
52
|
},
|
|
53
53
|
"./svelte": {
|
|
54
|
-
"types": "./dist/svelte/index.d.ts",
|
|
54
|
+
"types": "./dist/src/svelte/index.d.ts",
|
|
55
55
|
"import": "./dist/svelte/index.js"
|
|
56
56
|
},
|
|
57
57
|
"./vue": {
|
|
58
|
-
"types": "./dist/vue/index.d.ts",
|
|
58
|
+
"types": "./dist/src/vue/index.d.ts",
|
|
59
59
|
"import": "./dist/vue/index.js"
|
|
60
60
|
}
|
|
61
61
|
},
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"url": "https://github.com/absolutejs/absolutejs.git"
|
|
88
88
|
},
|
|
89
89
|
"scripts": {
|
|
90
|
-
"build": "rm -rf dist && bun build src/index.ts src/react/index.ts src/react/hooks/index.ts src/svelte/index.ts src/vue/index.ts --outdir dist --sourcemap --target=bun --external react --external react-dom --external vue --external @vue/compiler-sfc --external vue/server-renderer --external svelte --external svelte/server --external elysia && bun build src/cli/index.ts --outfile dist/cli/index.js --target=bun && tsc --emitDeclarationOnly --project tsconfig.build.json && mkdir -p dist/dev && cp -r src/dev/client dist/dev/client",
|
|
90
|
+
"build": "rm -rf dist && bun build src/index.ts src/react/index.ts src/react/hooks/index.ts src/svelte/index.ts src/vue/index.ts --outdir dist --sourcemap --target=bun --external react --external react-dom --external vue --external @vue/compiler-sfc --external vue/server-renderer --external svelte --external svelte/compiler --external svelte/server --external elysia && bun build src/cli/index.ts --outfile dist/cli/index.js --target=bun && tsc --emitDeclarationOnly --project tsconfig.build.json && mkdir -p dist/dev && cp -r src/dev/client dist/dev/client",
|
|
91
91
|
"db:push": "drizzle-kit push",
|
|
92
92
|
"db:studio": "drizzle-kit studio",
|
|
93
93
|
"dev": "bun run src/cli/index.ts dev example/server.ts",
|
|
@@ -98,6 +98,6 @@
|
|
|
98
98
|
"test": "bun test",
|
|
99
99
|
"typecheck": "bun run tsc --noEmit"
|
|
100
100
|
},
|
|
101
|
-
"types": "./dist/index.d.ts",
|
|
102
|
-
"version": "0.16.
|
|
101
|
+
"types": "./dist/src/index.d.ts",
|
|
102
|
+
"version": "0.16.6"
|
|
103
103
|
}
|
package/tsconfig.build.json
CHANGED
|
@@ -11,11 +11,10 @@
|
|
|
11
11
|
"noImplicitAny": true,
|
|
12
12
|
"noUncheckedIndexedAccess": true,
|
|
13
13
|
"outDir": "dist",
|
|
14
|
-
"rootDir": "src",
|
|
15
14
|
"skipLibCheck": true,
|
|
16
15
|
"strict": true,
|
|
17
16
|
"target": "ESNext"
|
|
18
17
|
},
|
|
19
18
|
"exclude": ["node_modules", "src/dev/client"],
|
|
20
|
-
"include": ["src/**/*"]
|
|
19
|
+
"include": ["src/**/*", "types/**/*"]
|
|
21
20
|
}
|
package/types/build.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { build } from '../src/core/build';
|
|
2
|
+
import { devBuild } from '../src/core/devBuild';
|
|
3
|
+
|
|
4
|
+
export type BuildOptions = {
|
|
5
|
+
preserveIntermediateFiles?: boolean;
|
|
6
|
+
/** When true, build() throws on error instead of exit(1) - used by HMR rebuilds */
|
|
7
|
+
throwOnError?: boolean;
|
|
8
|
+
/** When true, HMR client code is injected into built assets. Set by devBuild(). */
|
|
9
|
+
injectHMR?: boolean;
|
|
10
|
+
hmr?: {
|
|
11
|
+
debounceMs?: number;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export type BuildConfig = {
|
|
16
|
+
buildDirectory?: string;
|
|
17
|
+
assetsDirectory?: string;
|
|
18
|
+
publicDirectory?: string;
|
|
19
|
+
reactDirectory?: string;
|
|
20
|
+
vueDirectory?: string;
|
|
21
|
+
angularDirectory?: string;
|
|
22
|
+
astroDirectory?: string;
|
|
23
|
+
svelteDirectory?: string;
|
|
24
|
+
htmlDirectory?: string;
|
|
25
|
+
htmxDirectory?: string;
|
|
26
|
+
tailwind?: {
|
|
27
|
+
input: string;
|
|
28
|
+
output: string;
|
|
29
|
+
};
|
|
30
|
+
options?: BuildOptions;
|
|
31
|
+
// Optional: List of files to rebuild incrementally (absolute paths)
|
|
32
|
+
// When provided, only these files and their dependencies will be rebuilt
|
|
33
|
+
incrementalFiles?: string[];
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export type BuildResult = ReturnType<typeof build>;
|
|
37
|
+
export type DevBuildResult = ReturnType<typeof devBuild>;
|
|
38
|
+
export type Result = BuildResult | DevBuildResult;
|
|
39
|
+
|
|
40
|
+
export type Prettify<T> = { [K in keyof T]: T[K] } & {};
|