@absolutejs/absolute 0.19.0-beta.176 → 0.19.0-beta.178
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/.absolutejs/eslint-cache +1 -1
- package/.absolutejs/tsconfig.tsbuildinfo +1 -1
- package/ROADMAP.md +191 -191
- package/dist/Image-fpjk72vg.vue +140 -0
- package/dist/src/angular/components/image.component.d.ts +33 -0
- package/dist/src/angular/components/index.d.ts +1 -0
- package/dist/src/angular/components/index.js +395 -0
- package/dist/src/angular/components/index.js.map +11 -0
- package/dist/{angular → src/angular}/index.js +11 -1
- package/dist/{angular → src/angular}/index.js.map +2 -2
- package/dist/src/build/optimizeHtmlImages.d.ts +2 -0
- package/dist/{build.js → src/build.js} +496 -243
- package/dist/{build.js.map → src/build.js.map} +7 -5
- package/dist/{index.js → src/index.js} +746 -276
- package/dist/{index.js.map → src/index.js.map} +9 -6
- package/dist/src/plugins/imageOptimizer.d.ts +2 -0
- package/dist/src/react/components/Image.d.ts +2 -0
- package/dist/src/react/components/index.d.ts +1 -0
- package/dist/{react → src/react}/hooks/index.js +11 -1
- package/dist/{react → src/react}/hooks/index.js.map +2 -2
- package/dist/{react → src/react}/index.js +11 -1
- package/dist/{react → src/react}/index.js.map +2 -2
- package/dist/{svelte → src/svelte}/index.js +11 -1
- package/dist/{svelte → src/svelte}/index.js.map +2 -2
- package/dist/src/utils/imageProcessing.d.ts +33 -0
- package/dist/src/vue/components/index.d.ts +1 -0
- package/dist/src/vue/components/index.js +84 -0
- package/dist/src/vue/components/index.js.map +9 -0
- package/dist/{vue → src/vue}/index.js +11 -1
- package/dist/{vue → src/vue}/index.js.map +2 -2
- package/dist/svelte/components/Head.svelte +147 -0
- package/dist/svelte/components/Image.svelte +158 -0
- package/dist/svelte/components/JsonLd.svelte +20 -0
- package/dist/types/build.d.ts +2 -0
- package/dist/types/image.d.ts +77 -0
- package/dist/types/index.d.ts +1 -0
- package/package.json +19 -4
- package/types/build.ts +3 -0
- package/types/image.ts +91 -0
- package/types/index.ts +1 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { ImageProps } from '../../../types/image';
|
|
2
|
+
export declare const Image: ({ alt, blurDataURL, className, crossOrigin, fetchPriority, fill, height, loader, loading, onError, onLoad, overrideSrc, placeholder, priority, quality, referrerPolicy, sizes, src, style, unoptimized, width }: ImageProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -61,6 +61,16 @@ var __export = (target, all) => {
|
|
|
61
61
|
set: __exportSetter.bind(all, name)
|
|
62
62
|
});
|
|
63
63
|
};
|
|
64
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
65
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
66
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
67
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
68
|
+
else
|
|
69
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
70
|
+
if (d = decorators[i])
|
|
71
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
72
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
73
|
+
};
|
|
64
74
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
65
75
|
var __require = import.meta.require;
|
|
66
76
|
// src/react/hooks/useMediaQuery.ts
|
|
@@ -146,5 +156,5 @@ export {
|
|
|
146
156
|
UserAgentProvider
|
|
147
157
|
};
|
|
148
158
|
|
|
149
|
-
//# debugId=
|
|
159
|
+
//# debugId=24AC2450E43CF05A64756E2164756E21
|
|
150
160
|
//# sourceMappingURL=index.js.map
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
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 = () => {\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\t'2xl': 1536,\n\tlg: 1024,\n\tmd: 768,\n\tsm: 640,\n\txl: 1280,\n\txs: 0\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\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\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
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAIA,IAAM,mBAAmB,cAAoC,IAAI;AAE1D,IAAM,oBAAoB,iBAAiB;AAElD,IAAM,mBAAmB,MAAM;AAAA,EAC9B,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,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACL;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,EAExB,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,EAE5C,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
|
+
"debugId": "24AC2450E43CF05A64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -61,6 +61,16 @@ var __export = (target, all) => {
|
|
|
61
61
|
set: __exportSetter.bind(all, name)
|
|
62
62
|
});
|
|
63
63
|
};
|
|
64
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
65
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
66
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
67
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
68
|
+
else
|
|
69
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
70
|
+
if (d = decorators[i])
|
|
71
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
72
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
73
|
+
};
|
|
64
74
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
65
75
|
var __require = import.meta.require;
|
|
66
76
|
|
|
@@ -165,5 +175,5 @@ export {
|
|
|
165
175
|
handleReactPageRequest
|
|
166
176
|
};
|
|
167
177
|
|
|
168
|
-
//# debugId=
|
|
178
|
+
//# debugId=C04107C0EB8F862564756E2164756E21
|
|
169
179
|
//# sourceMappingURL=index.js.map
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"import type { ComponentType as ReactComponent } from 'react';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\n\nlet ssrDirty = false;\n\nconst buildDirtyResponse = (\n\tindex: string,\n\tmaybeProps: Record<string, unknown> | undefined\n) => {\n\tconst propsScript = maybeProps\n\t\t? `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps)};`\n\t\t: '';\n\tconst dirtyFlag = 'window.__SSR_DIRTY__=true;';\n\tconst refreshSetup =\n\t\tprocess.env.NODE_ENV !== 'production'\n\t\t\t? 'window.__REFRESH_BUFFER__=[];' +\n\t\t\t\t'window.$RefreshReg$=function(t,i){window.__REFRESH_BUFFER__.push([t,i])};' +\n\t\t\t\t'window.$RefreshSig$=function(){return function(t){return t}};'\n\t\t\t: '';\n\tconst inlineScript = `${propsScript}${dirtyFlag}${refreshSetup}`;\n\tconst html =\n\t\t`<!DOCTYPE html><html><head></head><body>` +\n\t\t`<script>${inlineScript}</script>` +\n\t\t`<script type=\"module\" src=\"${index}\"></script>` +\n\t\t`</body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' }\n\t});\n};\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: NoInfer<Props>]\n) => {\n\tconst [maybeProps] = props;\n\n\tif (ssrDirty) {\n\t\treturn buildDirtyResponse(index, maybeProps);\n\t}\n\n\ttry {\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 propsScript = maybeProps\n\t\t\t? `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps)};`\n\t\t\t: '';\n\n\t\t// Buffer React Refresh registrations until the runtime loads.\n\t\t// Bun.build injects $RefreshReg$ calls in the bundle, but the\n\t\t// real runtime isn't ready yet. This buffering function captures\n\t\t// all registrations, then replays them when the runtime is set up.\n\t\tconst refreshSetup =\n\t\t\tprocess.env.NODE_ENV !== 'production'\n\t\t\t\t? 'window.__REFRESH_BUFFER__=[];' +\n\t\t\t\t\t'window.$RefreshReg$=function(t,i){window.__REFRESH_BUFFER__.push([t,i])};' +\n\t\t\t\t\t'window.$RefreshSig$=function(){return function(t){return t}};'\n\t\t\t\t: '';\n\n\t\tconst stream = await renderToReadableStream(element, {\n\t\t\tbootstrapModules: [index],\n\t\t\tbootstrapScriptContent: propsScript + refreshSetup || 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\theaders: { 'Content-Type': 'text/html' },\n\t\t\tstatus: 500\n\t\t});\n\t}\n};\n\nexport const invalidateReactSsrCache = () => {\n\tssrDirty = true;\n};\n",
|
|
7
7
|
"export { handleReactPageRequest } from './pageHandler';\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": "
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAa,eAAe,CAAC,WAAmB,UAAmB;AAAA,EAClE,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;;;IC1C5F,WAAW,OAET,qBAAqB,CAC1B,OACA,eACI;AAAA,EACJ,MAAM,cAAc,aACjB,4BAA4B,KAAK,UAAU,UAAU,OACrD;AAAA,EACH,MAAM,YAAY;AAAA,EAClB,MAAM,eAEF,kCACD,8EACA;AAAA,EAEH,MAAM,eAAe,GAAG,cAAc,YAAY;AAAA,EAClD,MAAM,OACL,6CACA,WAAW,0BACX,8BAA8B,qBAC9B;AAAA,EAED,OAAO,IAAI,SAAS,MAAM;AAAA,IACzB,SAAS,EAAE,gBAAgB,YAAY;AAAA,EACxC,CAAC;AAAA,GAGW,yBAAyB,OAGrC,eACA,UACG,UACC;AAAA,EACJ,OAAO,cAAc;AAAA,EAErB,IAAI,UAAU;AAAA,IACb,OAAO,mBAAmB,OAAO,UAAU;AAAA,EAC5C;AAAA,EAEA,IAAI;AAAA,IACH,QAAQ,kBAAkB,MAAa;AAAA,IACvC,QAAQ,2BAA2B,MAAa;AAAA,IAEhD,MAAM,UACL,eAAe,YACZ,cAAc,eAAe,UAAU,IACvC,cAAc,aAAa;AAAA,IAE/B,MAAM,cAAc,aACjB,4BAA4B,KAAK,UAAU,UAAU,OACrD;AAAA,IAMH,MAAM,eAEF;AAAA,IAKJ,MAAM,SAAS,MAAM,uBAAuB,SAAS;AAAA,MACpD,kBAAkB,CAAC,KAAK;AAAA,MACxB,wBAAwB,cAAc,gBAAgB;AAAA,MACtD,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,SAAS,EAAE,gBAAgB,YAAY;AAAA,MACvC,QAAQ;AAAA,IACT,CAAC;AAAA;AAAA,GAIU,0BAA0B,MAAM;AAAA,EAC5C,WAAW;AAAA;AAAA;;;AC1FZ;",
|
|
10
|
+
"debugId": "C04107C0EB8F862564756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
|
@@ -61,6 +61,16 @@ var __export = (target, all) => {
|
|
|
61
61
|
set: __exportSetter.bind(all, name)
|
|
62
62
|
});
|
|
63
63
|
};
|
|
64
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
65
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
66
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
67
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
68
|
+
else
|
|
69
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
70
|
+
if (d = decorators[i])
|
|
71
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
72
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
73
|
+
};
|
|
64
74
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
65
75
|
var __require = import.meta.require;
|
|
66
76
|
|
|
@@ -236,5 +246,5 @@ export {
|
|
|
236
246
|
handleSveltePageRequest
|
|
237
247
|
};
|
|
238
248
|
|
|
239
|
-
//# debugId=
|
|
249
|
+
//# debugId=1547CD5B44E305D364756E2164756E21
|
|
240
250
|
//# sourceMappingURL=index.js.map
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"import type { Component as SvelteComponent } from 'svelte';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\n\nlet ssrDirty = false;\n\nconst buildDirtyResponse = (indexPath: string, props?: unknown) => {\n\tconst propsScript = `window.__INITIAL_PROPS__=${JSON.stringify(props)};`;\n\tconst dirtyFlag = 'window.__SSR_DIRTY__=true;';\n\tconst scriptTag = indexPath\n\t\t? `<script type=\"module\" src=\"${indexPath}\"></script>`\n\t\t: '';\n\tconst html = `<!DOCTYPE html><html><head></head><body><script>${propsScript}${dirtyFlag}</script>${scriptTag}</body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' }\n\t});\n};\n\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: NoInfer<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\tif (ssrDirty) {\n\t\treturn buildDirtyResponse(indexPath, props);\n\t}\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\theaders: { 'Content-Type': 'text/html' },\n\t\t\tstatus: 500\n\t\t});\n\t}\n};\n\nexport const invalidateSvelteSsrCache = () => {\n\tssrDirty = true;\n};\n",
|
|
10
10
|
"export { handleSveltePageRequest } from './pageHandler';\nexport { renderToReadableStream } from './renderToReadableStream';\n"
|
|
11
11
|
],
|
|
12
|
-
"mappings": "
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "1547CD5B44E305D364756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ImageConfig, ImageFormat, RemotePattern } from '../../types/image';
|
|
2
|
+
export declare const DEFAULT_DEVICE_SIZES: number[];
|
|
3
|
+
export declare const DEFAULT_IMAGE_SIZES: number[];
|
|
4
|
+
export declare const DEFAULT_QUALITY = 75;
|
|
5
|
+
export declare const OPTIMIZATION_ENDPOINT = "/_absolute/image";
|
|
6
|
+
export declare const buildOptimizedUrl: (src: string, width: number, quality: number, basePath?: string) => string;
|
|
7
|
+
export type CacheMeta = {
|
|
8
|
+
contentType: string;
|
|
9
|
+
etag: string;
|
|
10
|
+
expireAt: number;
|
|
11
|
+
upstreamEtag?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const formatToMime: (format: ImageFormat) => string;
|
|
14
|
+
export declare const generateBlurDataURL: (buffer: Buffer | ArrayBuffer) => Promise<string>;
|
|
15
|
+
export declare const generateBlurSvg: (base64Thumbnail: string) => string;
|
|
16
|
+
export declare const generateSrcSet: (src: string, width: number | undefined, sizes: string | undefined, config?: ImageConfig, loader?: (params: {
|
|
17
|
+
quality: number;
|
|
18
|
+
src: string;
|
|
19
|
+
width: number;
|
|
20
|
+
}) => string) => string;
|
|
21
|
+
export declare const getAllSizes: (config?: ImageConfig) => number[];
|
|
22
|
+
export declare const getCacheDir: (buildDir: string) => string;
|
|
23
|
+
export declare const getCacheKey: (url: string, width: number, quality: number, format: string) => string;
|
|
24
|
+
export declare const isCacheStale: (meta: CacheMeta) => boolean;
|
|
25
|
+
export declare const matchRemotePattern: (urlString: string, patterns: RemotePattern[]) => boolean;
|
|
26
|
+
export declare const negotiateFormat: (acceptHeader: string, configuredFormats: ImageFormat[]) => ImageFormat;
|
|
27
|
+
export declare const optimizeImage: (buffer: Buffer | ArrayBuffer, width: number, quality: number, format: ImageFormat) => Promise<any>;
|
|
28
|
+
export declare const readFromCache: (cacheDir: string, cacheKey: string) => {
|
|
29
|
+
buffer: NonSharedBuffer;
|
|
30
|
+
meta: CacheMeta;
|
|
31
|
+
} | null;
|
|
32
|
+
export declare const tryLoadSharp: () => Promise<unknown>;
|
|
33
|
+
export declare const writeToCache: (cacheDir: string, cacheKey: string, buffer: Buffer, meta: CacheMeta) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Image } from './Image.vue';
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
function __accessProp(key) {
|
|
9
|
+
return this[key];
|
|
10
|
+
}
|
|
11
|
+
var __toESMCache_node;
|
|
12
|
+
var __toESMCache_esm;
|
|
13
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
14
|
+
var canCache = mod != null && typeof mod === "object";
|
|
15
|
+
if (canCache) {
|
|
16
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
17
|
+
var cached = cache.get(mod);
|
|
18
|
+
if (cached)
|
|
19
|
+
return cached;
|
|
20
|
+
}
|
|
21
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
22
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
23
|
+
for (let key of __getOwnPropNames(mod))
|
|
24
|
+
if (!__hasOwnProp.call(to, key))
|
|
25
|
+
__defProp(to, key, {
|
|
26
|
+
get: __accessProp.bind(mod, key),
|
|
27
|
+
enumerable: true
|
|
28
|
+
});
|
|
29
|
+
if (canCache)
|
|
30
|
+
cache.set(mod, to);
|
|
31
|
+
return to;
|
|
32
|
+
};
|
|
33
|
+
var __toCommonJS = (from) => {
|
|
34
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
35
|
+
if (entry)
|
|
36
|
+
return entry;
|
|
37
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
38
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
39
|
+
for (var key of __getOwnPropNames(from))
|
|
40
|
+
if (!__hasOwnProp.call(entry, key))
|
|
41
|
+
__defProp(entry, key, {
|
|
42
|
+
get: __accessProp.bind(from, key),
|
|
43
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
__moduleCache.set(from, entry);
|
|
47
|
+
return entry;
|
|
48
|
+
};
|
|
49
|
+
var __moduleCache;
|
|
50
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
51
|
+
var __returnValue = (v) => v;
|
|
52
|
+
function __exportSetter(name, newValue) {
|
|
53
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
54
|
+
}
|
|
55
|
+
var __export = (target, all) => {
|
|
56
|
+
for (var name in all)
|
|
57
|
+
__defProp(target, name, {
|
|
58
|
+
get: all[name],
|
|
59
|
+
enumerable: true,
|
|
60
|
+
configurable: true,
|
|
61
|
+
set: __exportSetter.bind(all, name)
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
65
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
66
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
67
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
68
|
+
else
|
|
69
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
70
|
+
if (d = decorators[i])
|
|
71
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
72
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
73
|
+
};
|
|
74
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
75
|
+
var __require = import.meta.require;
|
|
76
|
+
|
|
77
|
+
// src/vue/components/Image.vue
|
|
78
|
+
var Image_default = "../../../Image-fpjk72vg.vue";
|
|
79
|
+
export {
|
|
80
|
+
Image_default as Image
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
//# debugId=2637FFD98D31F52864756E2164756E21
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -61,6 +61,16 @@ var __export = (target, all) => {
|
|
|
61
61
|
set: __exportSetter.bind(all, name)
|
|
62
62
|
});
|
|
63
63
|
};
|
|
64
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
65
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
66
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
67
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
68
|
+
else
|
|
69
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
70
|
+
if (d = decorators[i])
|
|
71
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
72
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
73
|
+
};
|
|
64
74
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
65
75
|
var __require = import.meta.require;
|
|
66
76
|
|
|
@@ -170,5 +180,5 @@ export {
|
|
|
170
180
|
handleVuePageRequest
|
|
171
181
|
};
|
|
172
182
|
|
|
173
|
-
//# debugId=
|
|
183
|
+
//# debugId=24645FA716B2340F64756E2164756E21
|
|
174
184
|
//# sourceMappingURL=index.js.map
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"import type { Component as VueComponent } from 'vue';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\n\nlet ssrDirty = false;\n\nconst buildDirtyResponse = (\n\theadTag: string,\n\tindexPath: string,\n\tmaybeProps: Record<string, unknown> | undefined\n) => {\n\tconst propsScript = `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps ?? {})};`;\n\tconst dirtyFlag = 'window.__SSR_DIRTY__=true;';\n\tconst html =\n\t\t`<!DOCTYPE html><html>${headTag}<body><div id=\"root\"></div>` +\n\t\t`<script>${propsScript}${dirtyFlag}</script>` +\n\t\t`<script type=\"module\" src=\"${indexPath}\"></script>` +\n\t\t`</body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' }\n\t});\n};\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: NoInfer<Props>]\n) => {\n\tconst [maybeProps] = props;\n\n\tif (ssrDirty) {\n\t\treturn buildDirtyResponse(headTag, indexPath, maybeProps);\n\t}\n\n\ttry {\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\theaders: { 'Content-Type': 'text/html' },\n\t\t\tstatus: 500\n\t\t});\n\t}\n};\n\nexport const invalidateVueSsrCache = () => {\n\tssrDirty = true;\n};\n",
|
|
7
7
|
"export { handleVuePageRequest } from './pageHandler';\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": "
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "24645FA716B2340F64756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Metadata, RobotsDirective } from '../../../types/metadata';
|
|
3
|
+
|
|
4
|
+
let {
|
|
5
|
+
title = 'AbsoluteJS',
|
|
6
|
+
description = 'A page created using AbsoluteJS',
|
|
7
|
+
icon = '/assets/ico/favicon.ico',
|
|
8
|
+
font,
|
|
9
|
+
cssPath,
|
|
10
|
+
canonical,
|
|
11
|
+
openGraph,
|
|
12
|
+
twitter,
|
|
13
|
+
robots,
|
|
14
|
+
meta
|
|
15
|
+
}: Metadata = $props();
|
|
16
|
+
|
|
17
|
+
const robotsContent = (r: RobotsDirective) => {
|
|
18
|
+
const directives: string[] = [];
|
|
19
|
+
if (r.index === false) directives.push('noindex');
|
|
20
|
+
if (r.index === true) directives.push('index');
|
|
21
|
+
if (r.follow === false) directives.push('nofollow');
|
|
22
|
+
if (r.follow === true) directives.push('follow');
|
|
23
|
+
if (r.noarchive) directives.push('noarchive');
|
|
24
|
+
if (r.nosnippet) directives.push('nosnippet');
|
|
25
|
+
if (r.noimageindex) directives.push('noimageindex');
|
|
26
|
+
if (r.maxSnippet !== undefined)
|
|
27
|
+
directives.push(`max-snippet:${r.maxSnippet}`);
|
|
28
|
+
if (r.maxImagePreview)
|
|
29
|
+
directives.push(`max-image-preview:${r.maxImagePreview}`);
|
|
30
|
+
if (r.maxVideoPreview !== undefined)
|
|
31
|
+
directives.push(`max-video-preview:${r.maxVideoPreview}`);
|
|
32
|
+
return directives.join(', ');
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const cssPaths = $derived(
|
|
36
|
+
cssPath ? (Array.isArray(cssPath) ? cssPath : [cssPath]) : []
|
|
37
|
+
);
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<svelte:head>
|
|
41
|
+
<meta charset="utf-8" />
|
|
42
|
+
<title>{title}</title>
|
|
43
|
+
<meta name="description" content={description} />
|
|
44
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
45
|
+
<link rel="icon" href={icon} />
|
|
46
|
+
|
|
47
|
+
{#if canonical}
|
|
48
|
+
<link rel="canonical" href={canonical} />
|
|
49
|
+
{/if}
|
|
50
|
+
|
|
51
|
+
{#if openGraph}
|
|
52
|
+
<meta property="og:title" content={openGraph.title ?? title} />
|
|
53
|
+
<meta
|
|
54
|
+
property="og:description"
|
|
55
|
+
content={openGraph.description ?? description}
|
|
56
|
+
/>
|
|
57
|
+
{#if openGraph.url}
|
|
58
|
+
<meta property="og:url" content={openGraph.url} />
|
|
59
|
+
{/if}
|
|
60
|
+
{#if openGraph.image}
|
|
61
|
+
<meta property="og:image" content={openGraph.image} />
|
|
62
|
+
{/if}
|
|
63
|
+
{#if openGraph.imageAlt}
|
|
64
|
+
<meta property="og:image:alt" content={openGraph.imageAlt} />
|
|
65
|
+
{/if}
|
|
66
|
+
{#if openGraph.imageWidth}
|
|
67
|
+
<meta
|
|
68
|
+
property="og:image:width"
|
|
69
|
+
content={String(openGraph.imageWidth)}
|
|
70
|
+
/>
|
|
71
|
+
{/if}
|
|
72
|
+
{#if openGraph.imageHeight}
|
|
73
|
+
<meta
|
|
74
|
+
property="og:image:height"
|
|
75
|
+
content={String(openGraph.imageHeight)}
|
|
76
|
+
/>
|
|
77
|
+
{/if}
|
|
78
|
+
{#if openGraph.type}
|
|
79
|
+
<meta property="og:type" content={openGraph.type} />
|
|
80
|
+
{/if}
|
|
81
|
+
{#if openGraph.siteName}
|
|
82
|
+
<meta property="og:site_name" content={openGraph.siteName} />
|
|
83
|
+
{/if}
|
|
84
|
+
{#if openGraph.locale}
|
|
85
|
+
<meta property="og:locale" content={openGraph.locale} />
|
|
86
|
+
{/if}
|
|
87
|
+
{/if}
|
|
88
|
+
|
|
89
|
+
{#if twitter}
|
|
90
|
+
{#if twitter.card}
|
|
91
|
+
<meta name="twitter:card" content={twitter.card} />
|
|
92
|
+
{/if}
|
|
93
|
+
<meta name="twitter:title" content={twitter.title ?? title} />
|
|
94
|
+
<meta
|
|
95
|
+
name="twitter:description"
|
|
96
|
+
content={twitter.description ?? description}
|
|
97
|
+
/>
|
|
98
|
+
{#if twitter.image}
|
|
99
|
+
<meta name="twitter:image" content={twitter.image} />
|
|
100
|
+
{/if}
|
|
101
|
+
{#if twitter.imageAlt}
|
|
102
|
+
<meta name="twitter:image:alt" content={twitter.imageAlt} />
|
|
103
|
+
{/if}
|
|
104
|
+
{#if twitter.site}
|
|
105
|
+
<meta name="twitter:site" content={twitter.site} />
|
|
106
|
+
{/if}
|
|
107
|
+
{#if twitter.creator}
|
|
108
|
+
<meta name="twitter:creator" content={twitter.creator} />
|
|
109
|
+
{/if}
|
|
110
|
+
{/if}
|
|
111
|
+
|
|
112
|
+
{#if robots}
|
|
113
|
+
{@const content = robotsContent(robots)}
|
|
114
|
+
{#if content}
|
|
115
|
+
<meta name="robots" {content} />
|
|
116
|
+
{/if}
|
|
117
|
+
{/if}
|
|
118
|
+
|
|
119
|
+
{#if meta}
|
|
120
|
+
{#each meta as tag}
|
|
121
|
+
{#if tag.property}
|
|
122
|
+
<meta property={tag.property} content={tag.content} />
|
|
123
|
+
{:else if tag.httpEquiv}
|
|
124
|
+
<meta http-equiv={tag.httpEquiv} content={tag.content} />
|
|
125
|
+
{:else if tag.name}
|
|
126
|
+
<meta name={tag.name} content={tag.content} />
|
|
127
|
+
{/if}
|
|
128
|
+
{/each}
|
|
129
|
+
{/if}
|
|
130
|
+
|
|
131
|
+
{#if font}
|
|
132
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
133
|
+
<link
|
|
134
|
+
rel="preconnect"
|
|
135
|
+
href="https://fonts.gstatic.com"
|
|
136
|
+
crossOrigin="anonymous"
|
|
137
|
+
/>
|
|
138
|
+
<link
|
|
139
|
+
href={`https://fonts.googleapis.com/css2?family=${font}:wght@100..900&display=swap`}
|
|
140
|
+
rel="stylesheet"
|
|
141
|
+
/>
|
|
142
|
+
{/if}
|
|
143
|
+
|
|
144
|
+
{#each cssPaths as path}
|
|
145
|
+
<link rel="stylesheet" href={path} type="text/css" />
|
|
146
|
+
{/each}
|
|
147
|
+
</svelte:head>
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ImageProps } from '../../../types/image';
|
|
3
|
+
import {
|
|
4
|
+
DEFAULT_QUALITY,
|
|
5
|
+
buildOptimizedUrl,
|
|
6
|
+
generateBlurSvg,
|
|
7
|
+
generateSrcSet
|
|
8
|
+
} from '../../utils/imageProcessing';
|
|
9
|
+
|
|
10
|
+
let {
|
|
11
|
+
src,
|
|
12
|
+
alt,
|
|
13
|
+
width,
|
|
14
|
+
height,
|
|
15
|
+
fill,
|
|
16
|
+
quality = DEFAULT_QUALITY,
|
|
17
|
+
sizes,
|
|
18
|
+
loader,
|
|
19
|
+
unoptimized,
|
|
20
|
+
loading,
|
|
21
|
+
priority,
|
|
22
|
+
placeholder,
|
|
23
|
+
blurDataURL,
|
|
24
|
+
className,
|
|
25
|
+
style,
|
|
26
|
+
onLoad,
|
|
27
|
+
onError,
|
|
28
|
+
crossOrigin,
|
|
29
|
+
referrerPolicy,
|
|
30
|
+
fetchPriority,
|
|
31
|
+
overrideSrc
|
|
32
|
+
}: ImageProps = $props();
|
|
33
|
+
|
|
34
|
+
const resolvedSrc = $derived.by(() => {
|
|
35
|
+
if (overrideSrc) return overrideSrc;
|
|
36
|
+
if (unoptimized) return src;
|
|
37
|
+
if (loader) return loader({ src, width: width ?? 0, quality });
|
|
38
|
+
if (!width) return buildOptimizedUrl(src, 0, quality);
|
|
39
|
+
return buildOptimizedUrl(src, width, quality);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const srcSet = $derived(
|
|
43
|
+
unoptimized
|
|
44
|
+
? undefined
|
|
45
|
+
: generateSrcSet(src, width, sizes, undefined, loader ?? undefined)
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
const resolvedSizes = $derived(sizes ?? (fill ? '100vw' : undefined));
|
|
49
|
+
|
|
50
|
+
const resolvedLoading = $derived(priority ? 'eager' : (loading ?? 'lazy'));
|
|
51
|
+
|
|
52
|
+
const resolvedFetchPriority = $derived(priority ? 'high' : fetchPriority);
|
|
53
|
+
|
|
54
|
+
const hasBlur = $derived(
|
|
55
|
+
placeholder === 'blur' ||
|
|
56
|
+
(typeof placeholder === 'string' &&
|
|
57
|
+
placeholder !== 'empty' &&
|
|
58
|
+
placeholder.startsWith('data:'))
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
const blurBackground = $derived.by(() => {
|
|
62
|
+
if (!hasBlur) return undefined;
|
|
63
|
+
if (
|
|
64
|
+
typeof placeholder === 'string' &&
|
|
65
|
+
placeholder !== 'blur' &&
|
|
66
|
+
placeholder.startsWith('data:')
|
|
67
|
+
) {
|
|
68
|
+
return generateBlurSvg(placeholder);
|
|
69
|
+
}
|
|
70
|
+
if (blurDataURL) return generateBlurSvg(blurDataURL);
|
|
71
|
+
return undefined;
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const imgStyle = $derived.by(() => {
|
|
75
|
+
const base: Record<string, string | number> = {
|
|
76
|
+
...(style ?? {}),
|
|
77
|
+
color: 'transparent'
|
|
78
|
+
};
|
|
79
|
+
if (blurBackground) {
|
|
80
|
+
base.backgroundImage = blurBackground;
|
|
81
|
+
base.backgroundSize = 'cover';
|
|
82
|
+
base.backgroundPosition = 'center';
|
|
83
|
+
base.backgroundRepeat = 'no-repeat';
|
|
84
|
+
}
|
|
85
|
+
if (fill) {
|
|
86
|
+
base.position = 'absolute';
|
|
87
|
+
base.height = '100%';
|
|
88
|
+
base.width = '100%';
|
|
89
|
+
base.inset = 0;
|
|
90
|
+
base.objectFit = 'cover';
|
|
91
|
+
}
|
|
92
|
+
return Object.entries(base)
|
|
93
|
+
.map(([k, v]) => `${k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`)}:${v}`)
|
|
94
|
+
.join(';');
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const handleLoad = (e: Event) => {
|
|
98
|
+
if (blurBackground) {
|
|
99
|
+
(e.target as HTMLImageElement).style.backgroundImage = 'none';
|
|
100
|
+
}
|
|
101
|
+
if (onLoad) (onLoad as (event: Event) => void)(e);
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const handleError = (e: Event) => {
|
|
105
|
+
if (onError) (onError as (event: Event) => void)(e);
|
|
106
|
+
};
|
|
107
|
+
</script>
|
|
108
|
+
|
|
109
|
+
{#if priority}
|
|
110
|
+
<svelte:head>
|
|
111
|
+
<link
|
|
112
|
+
rel="preload"
|
|
113
|
+
as="image"
|
|
114
|
+
href={resolvedSrc}
|
|
115
|
+
imagesrcset={srcSet}
|
|
116
|
+
imagesizes={resolvedSizes}
|
|
117
|
+
crossorigin={crossOrigin}
|
|
118
|
+
/>
|
|
119
|
+
</svelte:head>
|
|
120
|
+
{/if}
|
|
121
|
+
|
|
122
|
+
{#if fill}
|
|
123
|
+
<span style="position:relative;overflow:hidden;display:block;width:100%;height:100%">
|
|
124
|
+
<img
|
|
125
|
+
{alt}
|
|
126
|
+
src={resolvedSrc}
|
|
127
|
+
srcset={srcSet}
|
|
128
|
+
sizes={resolvedSizes}
|
|
129
|
+
loading={resolvedLoading}
|
|
130
|
+
class={className}
|
|
131
|
+
style={imgStyle}
|
|
132
|
+
crossorigin={crossOrigin}
|
|
133
|
+
referrerpolicy={referrerPolicy}
|
|
134
|
+
fetchpriority={resolvedFetchPriority}
|
|
135
|
+
decoding="async"
|
|
136
|
+
onload={handleLoad}
|
|
137
|
+
onerror={handleError}
|
|
138
|
+
/>
|
|
139
|
+
</span>
|
|
140
|
+
{:else}
|
|
141
|
+
<img
|
|
142
|
+
{alt}
|
|
143
|
+
src={resolvedSrc}
|
|
144
|
+
srcset={srcSet}
|
|
145
|
+
sizes={resolvedSizes}
|
|
146
|
+
{width}
|
|
147
|
+
{height}
|
|
148
|
+
loading={resolvedLoading}
|
|
149
|
+
class={className}
|
|
150
|
+
style={imgStyle}
|
|
151
|
+
crossorigin={crossOrigin}
|
|
152
|
+
referrerpolicy={referrerPolicy}
|
|
153
|
+
fetchpriority={resolvedFetchPriority}
|
|
154
|
+
decoding="async"
|
|
155
|
+
onload={handleLoad}
|
|
156
|
+
onerror={handleError}
|
|
157
|
+
/>
|
|
158
|
+
{/if}
|