@analogjs/router 2.0.0-alpha.9 → 2.0.0-beta.2
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/fesm2022/{analogjs-router-debug.page-e5DJlNv3.mjs → analogjs-router-debug.page-C7mEWSZu.mjs} +4 -4
- package/fesm2022/{analogjs-router-debug.page-e5DJlNv3.mjs.map → analogjs-router-debug.page-C7mEWSZu.mjs.map} +1 -1
- package/fesm2022/analogjs-router-server-actions.mjs.map +1 -1
- package/fesm2022/analogjs-router-server.mjs +4 -12
- package/fesm2022/analogjs-router-server.mjs.map +1 -1
- package/fesm2022/analogjs-router.mjs +12 -12
- package/fesm2022/analogjs-router.mjs.map +1 -1
- package/index.d.ts +265 -16
- package/package.json +8 -4
- package/server/actions/index.d.ts +16 -1
- package/server/index.d.ts +28 -4
- package/tokens/index.d.ts +16 -12
- package/lib/cache-key.d.ts +0 -3
- package/lib/constants.d.ts +0 -2
- package/lib/cookie-interceptor.d.ts +0 -2
- package/lib/debug/debug.page.d.ts +0 -17
- package/lib/debug/index.d.ts +0 -16
- package/lib/debug/routes.d.ts +0 -10
- package/lib/define-route.d.ts +0 -46
- package/lib/endpoints.d.ts +0 -5
- package/lib/form-action.directive.d.ts +0 -19
- package/lib/get-load-resolver.d.ts +0 -8
- package/lib/inject-load.d.ts +0 -6
- package/lib/inject-route-endpoint-url.d.ts +0 -2
- package/lib/markdown-helpers.d.ts +0 -2
- package/lib/meta-tags.d.ts +0 -28
- package/lib/models.d.ts +0 -29
- package/lib/provide-file-router.d.ts +0 -18
- package/lib/request-context.d.ts +0 -12
- package/lib/route-config.d.ts +0 -2
- package/lib/route-types.d.ts +0 -10
- package/lib/routes.d.ts +0 -19
- package/lib/server.component.d.ts +0 -32
- package/server/actions/actions.d.ts +0 -12
- package/server/provide-server-context.d.ts +0 -10
- package/server/render.d.ts +0 -12
- package/server/server-component-render.d.ts +0 -4
- package/server/tokens.d.ts +0 -7
package/fesm2022/{analogjs-router-debug.page-e5DJlNv3.mjs → analogjs-router-debug.page-C7mEWSZu.mjs}
RENAMED
|
@@ -27,8 +27,8 @@ class DebugRoutesComponent {
|
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
31
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
30
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: DebugRoutesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.0", type: DebugRoutesComponent, isStandalone: true, selector: "analogjs-debug-routes-page", ngImport: i0, template: `
|
|
32
32
|
<h2>Routes</h2>
|
|
33
33
|
|
|
34
34
|
<div class="table-container">
|
|
@@ -56,7 +56,7 @@ class DebugRoutesComponent {
|
|
|
56
56
|
</div>
|
|
57
57
|
`, isInline: true, styles: [":host{width:100%}.table-container{width:100%;max-width:900px;margin:0 auto;background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a;overflow:hidden}.table-header{display:grid;grid-template-columns:repeat(3,1fr);background:gray;border-bottom:2px solid #e5e7eb}.header-cell{padding:16px 24px;font-weight:600;text-transform:uppercase;font-size:14px;letter-spacing:.05em;color:#fff}.table-body{display:flex;flex-direction:column}.table-row{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1px solid #e5e7eb;transition:background-color .2s ease}.table-row:last-child{border-bottom:none}.table-row:hover{background-color:#f9fafb}.table-cell{padding:16px 24px;font-size:16px;color:#4b5563}@media (max-width: 640px){.table-container{border-radius:0;margin:0}.header-cell,.table-cell{padding:12px 16px}}\n"] }); }
|
|
58
58
|
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: DebugRoutesComponent, decorators: [{
|
|
60
60
|
type: Component,
|
|
61
61
|
args: [{ selector: 'analogjs-debug-routes-page', standalone: true, template: `
|
|
62
62
|
<h2>Routes</h2>
|
|
@@ -88,4 +88,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
|
|
|
88
88
|
}] });
|
|
89
89
|
|
|
90
90
|
export { DebugRoutesComponent as default };
|
|
91
|
-
//# sourceMappingURL=analogjs-router-debug.page-
|
|
91
|
+
//# sourceMappingURL=analogjs-router-debug.page-C7mEWSZu.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analogjs-router-debug.page-
|
|
1
|
+
{"version":3,"file":"analogjs-router-debug.page-C7mEWSZu.mjs","sources":["../../../../packages/router/src/lib/debug/debug.page.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\nimport { injectDebugRoutes, DebugRoute } from './routes';\n\ntype CollectedRoute = {\n path: string;\n filename: string;\n file: string;\n isLayout: boolean;\n};\n\n@Component({\n selector: 'analogjs-debug-routes-page',\n standalone: true,\n template: `\n <h2>Routes</h2>\n\n <div class=\"table-container\">\n <div class=\"table-header\">\n <div class=\"header-cell\">Route Path</div>\n <div class=\"header-cell\">File</div>\n <div class=\"header-cell\">Type</div>\n </div>\n <div class=\"table-body\">\n @for (\n collectedRoute of collectedRoutes;\n track collectedRoute.filename\n ) {\n <div class=\"table-row\">\n <div class=\"table-cell\">{{ collectedRoute.path }}</div>\n <div class=\"table-cell\" [title]=\"collectedRoute.filename\">\n {{ collectedRoute.file }}\n </div>\n <div class=\"table-cell\">\n {{ collectedRoute.isLayout ? 'Layout' : 'Page' }}\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styles: `\n :host {\n width: 100%;\n }\n\n .table-container {\n width: 100%;\n max-width: 900px;\n margin: 0 auto;\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n }\n\n .table-header {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n background: gray;\n border-bottom: 2px solid #e5e7eb;\n }\n\n .header-cell {\n padding: 16px 24px;\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n letter-spacing: 0.05em;\n color: white;\n }\n\n .table-body {\n display: flex;\n flex-direction: column;\n }\n\n .table-row {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n border-bottom: 1px solid #e5e7eb;\n transition: background-color 0.2s ease;\n }\n\n .table-row:last-child {\n border-bottom: none;\n }\n\n .table-row:hover {\n background-color: #f9fafb;\n }\n\n .table-cell {\n padding: 16px 24px;\n font-size: 16px;\n color: #4b5563;\n }\n\n @media (max-width: 640px) {\n .table-container {\n border-radius: 0;\n margin: 0;\n }\n\n .header-cell,\n .table-cell {\n padding: 12px 16px;\n }\n }\n `,\n})\nexport default class DebugRoutesComponent {\n collectedRoutes: CollectedRoute[] = [];\n debugRoutes = injectDebugRoutes();\n\n ngOnInit() {\n this.traverseRoutes(this.debugRoutes);\n }\n\n traverseRoutes(routes: DebugRoute[], parent?: string) {\n routes.forEach((route) => {\n this.collectedRoutes.push({\n path: route.isLayout\n ? `${parent ? `/${parent}` : ''}${route.path ? `/${route.path}` : ''}`\n : `${parent ? `/${parent}` : ''}${\n route.path ? `/${route.path}` : '/'\n }`,\n filename: route.filename,\n file: route.filename?.replace(/(^.*)pages\\//, '') || '',\n isLayout: route.isLayout,\n });\n\n if (route.children) {\n const parentSegments = [parent, route.path];\n\n const fullParentPath = parentSegments.filter((s) => !!s).join('/');\n this.traverseRoutes(route.children, fullParentPath);\n }\n });\n }\n}\n"],"names":[],"mappings":";;;;AA+Gc,MAAO,oBAAoB,CAAA;AApGzC,IAAA,WAAA,GAAA;QAqGE,IAAA,CAAA,eAAe,GAAqB,EAAE;QACtC,IAAA,CAAA,WAAW,GAAG,iBAAiB,EAAE;AA2BlC;IAzBC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;;IAGvC,cAAc,CAAC,MAAoB,EAAE,MAAe,EAAA;AAClD,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBACxB,IAAI,EAAE,KAAK,CAAC;AACV,sBAAE,CAAA,EAAG,MAAM,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,IAAI,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAA,CAAE,GAAG,EAAE,CAAA;AACpE,sBAAE,CAAA,EAAG,MAAM,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,GAAG,EAAE,CAAA,EAC3B,KAAK,CAAC,IAAI,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAA,CAAE,GAAG,GAClC,CAAA,CAAE;gBACN,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACxB,gBAAA,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,EAAE;gBACvD,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACzB,aAAA,CAAC;AAEF,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;gBAE3C,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAClE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC;;AAEvD,SAAC,CAAC;;8GA3Be,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjG7B;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ozBAAA,CAAA,EAAA,CAAA,CAAA;;2FAuEkB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBApGxC,SAAS;+BACE,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,QAAA,EACN;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ozBAAA,CAAA,EAAA;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analogjs-router-server-actions.mjs","sources":["../../../../packages/router/server/actions/src/actions.ts","../../../../packages/router/server/actions/src/analogjs-router-server-actions.ts"],"sourcesContent":["import type { H3Event, H3EventContext } from 'h3';\nimport type { $Fetch } from 'nitropack';\n\nexport type PageServerAction = {\n params: H3EventContext['params'];\n req: H3Event['node']['req'];\n res: H3Event['node']['res'];\n fetch: $Fetch;\n event: H3Event;\n};\n\nexport function fail<T = object>(status: number, errors: T) {\n return new Response(JSON.stringify(errors), {\n status,\n headers: {\n 'X-Analog-Errors': 'true',\n },\n });\n}\n\nexport function json<T = object>(data: T, config?: ResponseInit) {\n return new Response(JSON.stringify(data), {\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n },\n ...config,\n });\n}\n\nexport function redirect(url: string, config: number | ResponseInit = 302) {\n if (typeof config === 'number') {\n return new Response(null, {\n status: config,\n headers: {\n Location: `${url}`,\n },\n });\n }\n\n return new Response(null, {\n headers: {\n Location: `${url}`,\n },\n ...config,\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analogjs-router-server-actions.mjs","sources":["../../../../packages/router/server/actions/src/actions.ts","../../../../packages/router/server/actions/src/analogjs-router-server-actions.ts"],"sourcesContent":["import type { H3Event, H3EventContext } from 'h3';\nimport type { $Fetch } from 'nitropack';\n\nexport type PageServerAction = {\n params: H3EventContext['params'];\n req: H3Event['node']['req'];\n res: H3Event['node']['res'];\n fetch: $Fetch;\n event: H3Event;\n};\n\nexport function fail<T = object>(status: number, errors: T) {\n return new Response(JSON.stringify(errors), {\n status,\n headers: {\n 'X-Analog-Errors': 'true',\n },\n });\n}\n\nexport function json<T = object>(data: T, config?: ResponseInit) {\n return new Response(JSON.stringify(data), {\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n },\n ...config,\n });\n}\n\nexport function redirect(url: string, config: number | ResponseInit = 302) {\n if (typeof config === 'number') {\n return new Response(null, {\n status: config,\n headers: {\n Location: `${url}`,\n },\n });\n }\n\n return new Response(null, {\n headers: {\n Location: `${url}`,\n },\n ...config,\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAWM,SAAU,IAAI,CAAa,MAAc,EAAE,MAAS,EAAA;IACxD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QAC1C,MAAM;AACN,QAAA,OAAO,EAAE;AACP,YAAA,iBAAiB,EAAE,MAAM;AAC1B,SAAA;AACF,KAAA,CAAC;AACJ;AAEM,SAAU,IAAI,CAAa,IAAO,EAAE,MAAqB,EAAA;IAC7D,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AACxC,QAAA,OAAO,EAAE;AACP,YAAA,cAAc,EAAE,iCAAiC;AAClD,SAAA;AACD,QAAA,GAAG,MAAM;AACV,KAAA,CAAC;AACJ;SAEgB,QAAQ,CAAC,GAAW,EAAE,SAAgC,GAAG,EAAA;AACvE,IAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,QAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE;gBACP,QAAQ,EAAE,CAAA,EAAG,GAAG,CAAA,CAAE;AACnB,aAAA;AACF,SAAA,CAAC;;AAGJ,IAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACxB,QAAA,OAAO,EAAE;YACP,QAAQ,EAAE,CAAA,EAAG,GAAG,CAAA,CAAE;AACnB,SAAA;AACD,QAAA,GAAG,MAAM;AACV,KAAA,CAAC;AACJ;;AC7CA;;AAEG;;;;"}
|
|
@@ -88,7 +88,7 @@ async function renderServerComponent(url, serverContext, config) {
|
|
|
88
88
|
const event = createEvent(serverContext.req, serverContext.res);
|
|
89
89
|
const body = (await readBody(event)) || {};
|
|
90
90
|
const appId = `analog-server-${selector.toLowerCase()}-${new Date().getTime()}`;
|
|
91
|
-
const bootstrap = () => bootstrapApplication(component, {
|
|
91
|
+
const bootstrap = (context) => bootstrapApplication(component, {
|
|
92
92
|
providers: [
|
|
93
93
|
provideServerRendering(),
|
|
94
94
|
provideStaticProps(body),
|
|
@@ -101,7 +101,7 @@ async function renderServerComponent(url, serverContext, config) {
|
|
|
101
101
|
},
|
|
102
102
|
...(config?.providers || []),
|
|
103
103
|
],
|
|
104
|
-
});
|
|
104
|
+
}, context);
|
|
105
105
|
const html = await renderApplication(bootstrap, {
|
|
106
106
|
url,
|
|
107
107
|
document: `<${selector}></${selector}>`,
|
|
@@ -136,14 +136,6 @@ function getComponentLoader(componentReqId) {
|
|
|
136
136
|
componentId = `${_componentId}.ts`;
|
|
137
137
|
componentLoader = components[componentId];
|
|
138
138
|
}
|
|
139
|
-
else if (components[`${componentId}.analog`]) {
|
|
140
|
-
componentId = `${_componentId}.analog`;
|
|
141
|
-
componentLoader = components[componentId];
|
|
142
|
-
}
|
|
143
|
-
else if (components[`${componentId}.ag`]) {
|
|
144
|
-
componentId = `${_componentId}.ag`;
|
|
145
|
-
componentLoader = components[componentId];
|
|
146
|
-
}
|
|
147
139
|
return { componentLoader, componentId };
|
|
148
140
|
}
|
|
149
141
|
function retrieveTransferredState(html, appId) {
|
|
@@ -180,8 +172,8 @@ if (import.meta.env.PROD) {
|
|
|
180
172
|
* @returns Promise<string | Reponse>
|
|
181
173
|
*/
|
|
182
174
|
function render(rootComponent, config, platformProviders = []) {
|
|
183
|
-
function bootstrap() {
|
|
184
|
-
return bootstrapApplication(rootComponent, config);
|
|
175
|
+
function bootstrap(context) {
|
|
176
|
+
return bootstrapApplication(rootComponent, config, context);
|
|
185
177
|
}
|
|
186
178
|
return async function render(url, document, serverContext) {
|
|
187
179
|
if (serverComponentRequest(serverContext)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analogjs-router-server.mjs","sources":["../../../../packages/router/server/src/provide-server-context.ts","../../../../packages/router/server/src/tokens.ts","../../../../packages/router/server/src/server-component-render.ts","../../../../packages/router/server/src/render.ts","../../../../packages/router/server/src/analogjs-router-server.ts"],"sourcesContent":["import { StaticProvider, ɵresetCompiledComponents } from '@angular/core';\nimport { ɵSERVER_CONTEXT as SERVER_CONTEXT } from '@angular/platform-server';\n\nimport {\n BASE_URL,\n REQUEST,\n RESPONSE,\n ServerRequest,\n ServerResponse,\n} from '@analogjs/router/tokens';\n\nexport function provideServerContext({\n req,\n res,\n}: {\n req: ServerRequest;\n res: ServerResponse;\n}): StaticProvider[] {\n const baseUrl = getBaseUrl(req);\n\n if (import.meta.env.DEV) {\n ɵresetCompiledComponents();\n }\n\n return [\n { provide: SERVER_CONTEXT, useValue: 'ssr-analog' },\n { provide: REQUEST, useValue: req },\n { provide: RESPONSE, useValue: res },\n { provide: BASE_URL, useValue: baseUrl },\n ];\n}\n\nexport function getBaseUrl(req: ServerRequest) {\n const protocol = getRequestProtocol(req);\n const { originalUrl, headers } = req;\n const parsedUrl = new URL(\n '',\n `${protocol}://${headers.host}${\n originalUrl.endsWith('/')\n ? originalUrl.substring(0, originalUrl.length - 1)\n : originalUrl\n }`,\n );\n const baseUrl = parsedUrl.origin;\n\n return baseUrl;\n}\n\nexport function getRequestProtocol(\n req: ServerRequest,\n opts: { xForwardedProto?: boolean } = {},\n) {\n if (\n opts.xForwardedProto !== false &&\n req.headers['x-forwarded-proto'] === 'https'\n ) {\n return 'https';\n }\n\n return (req.connection as any)?.encrypted ? 'https' : 'http';\n}\n","import {\n assertInInjectionContext,\n inject,\n InjectionToken,\n makeStateKey,\n Provider,\n TransferState,\n} from '@angular/core';\n\nexport const STATIC_PROPS = new InjectionToken<Record<string, any>>(\n 'Static Props',\n);\n\nexport function provideStaticProps<T = Record<string, any>>(\n props: T,\n): Provider {\n return {\n provide: STATIC_PROPS,\n useFactory() {\n return props;\n },\n };\n}\n\nexport function injectStaticProps() {\n assertInInjectionContext(injectStaticProps);\n\n return inject(STATIC_PROPS);\n}\n\nexport function injectStaticOutputs<T>() {\n const transferState = inject(TransferState);\n const outputsKey = makeStateKey<T>('_analog_output');\n\n return {\n set(data: T) {\n transferState.set(outputsKey, data);\n },\n };\n}\n","import { ApplicationConfig, Type } from '@angular/core';\nimport { bootstrapApplication } from '@angular/platform-browser';\nimport {\n reflectComponentType,\n ɵConsole as Console,\n APP_ID,\n} from '@angular/core';\nimport {\n provideServerRendering,\n renderApplication,\n ɵSERVER_CONTEXT as SERVER_CONTEXT,\n} from '@angular/platform-server';\nimport { ServerContext } from '@analogjs/router/tokens';\nimport { createEvent, readBody, getHeader } from 'h3';\n\nimport { provideStaticProps } from './tokens';\n\ntype ComponentLoader = () => Promise<Type<unknown>>;\n\nexport function serverComponentRequest(serverContext: ServerContext) {\n const serverComponentId = getHeader(\n createEvent(serverContext.req, serverContext.res),\n 'X-Analog-Component',\n );\n\n if (\n !serverComponentId &&\n serverContext.req.url &&\n serverContext.req.url.startsWith('/_analog/components')\n ) {\n const componentId = serverContext.req.url.split('/')?.[3];\n\n return componentId;\n }\n\n return serverComponentId;\n}\n\nconst components = import.meta.glob([\n '/src/server/components/**/*.{ts,analog,ag}',\n]);\n\nexport async function renderServerComponent(\n url: string,\n serverContext: ServerContext,\n config?: ApplicationConfig,\n) {\n const componentReqId = serverComponentRequest(serverContext) as string;\n const { componentLoader, componentId } = getComponentLoader(componentReqId);\n\n if (!componentLoader) {\n return new Response(`Server Component Not Found ${componentId}`, {\n status: 404,\n });\n }\n\n const component = ((await componentLoader()) as any)[\n 'default'\n ] as Type<unknown>;\n\n if (!component) {\n return new Response(`No default export for ${componentId}`, {\n status: 422,\n });\n }\n\n const mirror = reflectComponentType(component);\n const selector = mirror?.selector.split(',')?.[0] || 'server-component';\n const event = createEvent(serverContext.req, serverContext.res);\n const body = (await readBody(event)) || {};\n const appId = `analog-server-${selector.toLowerCase()}-${new Date().getTime()}`;\n\n const bootstrap = () =>\n bootstrapApplication(component, {\n providers: [\n provideServerRendering(),\n provideStaticProps(body),\n { provide: SERVER_CONTEXT, useValue: 'analog-server-component' },\n {\n provide: APP_ID,\n useFactory() {\n return appId;\n },\n },\n ...(config?.providers || []),\n ],\n });\n\n const html = await renderApplication(bootstrap, {\n url,\n document: `<${selector}></${selector}>`,\n platformProviders: [\n {\n provide: Console,\n useFactory() {\n return {\n warn: () => {},\n log: () => {},\n };\n },\n },\n ],\n });\n\n const outputs = retrieveTransferredState(html, appId);\n const responseData: { html: string; outputs: Record<string, any> } = {\n html,\n outputs,\n };\n\n return new Response(JSON.stringify(responseData), {\n headers: {\n 'X-Analog-Component': 'true',\n },\n });\n}\n\nfunction getComponentLoader(componentReqId: string): {\n componentLoader: ComponentLoader | undefined;\n componentId: string;\n} {\n let _componentId = `/src/server/components/${componentReqId.toLowerCase()}`;\n let componentLoader: ComponentLoader | undefined = undefined;\n let componentId = _componentId;\n\n if (components[`${_componentId}.ts`]) {\n componentId = `${_componentId}.ts`;\n componentLoader = components[componentId] as ComponentLoader;\n } else if (components[`${componentId}.analog`]) {\n componentId = `${_componentId}.analog`;\n componentLoader = components[componentId] as ComponentLoader;\n } else if (components[`${componentId}.ag`]) {\n componentId = `${_componentId}.ag`;\n componentLoader = components[componentId] as ComponentLoader;\n }\n\n return { componentLoader, componentId };\n}\n\nfunction retrieveTransferredState(\n html: string,\n appId: string,\n): Record<string, unknown | undefined> {\n const regex = new RegExp(\n `<script id=\"${appId}-state\" type=\"application/json\">(.*?)<\\/script>`,\n );\n const match = html.match(regex);\n\n if (match) {\n const scriptContent = match[1];\n\n if (scriptContent) {\n try {\n const parsedContent: {\n _analog_output: Record<string, unknown | undefined>;\n } = JSON.parse(scriptContent);\n return parsedContent._analog_output || {};\n } catch (e) {\n console.warn('Exception while parsing static outputs for ' + appId, e);\n }\n }\n\n return {};\n } else {\n return {};\n }\n}\n","import {\n ApplicationConfig,\n Provider,\n Type,\n enableProdMode,\n} from '@angular/core';\nimport { bootstrapApplication } from '@angular/platform-browser';\nimport { renderApplication } from '@angular/platform-server';\nimport type { ServerContext } from '@analogjs/router/tokens';\n\nimport { provideServerContext } from './provide-server-context';\nimport {\n serverComponentRequest,\n renderServerComponent,\n} from './server-component-render';\n\nif (import.meta.env.PROD) {\n enableProdMode();\n}\n\n/**\n * Returns a function that accepts the navigation URL,\n * the root HTML, and server context.\n *\n * @param rootComponent\n * @param config\n * @param platformProviders\n * @returns Promise<string | Reponse>\n */\nexport function render(\n rootComponent: Type<unknown>,\n config: ApplicationConfig,\n platformProviders: Provider[] = [],\n) {\n function bootstrap() {\n return bootstrapApplication(rootComponent, config);\n }\n\n return async function render(\n url: string,\n document: string,\n serverContext: ServerContext,\n ) {\n if (serverComponentRequest(serverContext)) {\n return await renderServerComponent(url, serverContext);\n }\n\n const html = await renderApplication(bootstrap, {\n document,\n url,\n platformProviders: [\n provideServerContext(serverContext),\n platformProviders,\n ],\n });\n\n return html;\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵresetCompiledComponents","SERVER_CONTEXT","Console"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analogjs-router-server.mjs","sources":["../../../../packages/router/server/src/provide-server-context.ts","../../../../packages/router/server/src/tokens.ts","../../../../packages/router/server/src/server-component-render.ts","../../../../packages/router/server/src/render.ts","../../../../packages/router/server/src/analogjs-router-server.ts"],"sourcesContent":["import { StaticProvider, ɵresetCompiledComponents } from '@angular/core';\nimport { ɵSERVER_CONTEXT as SERVER_CONTEXT } from '@angular/platform-server';\n\nimport {\n BASE_URL,\n REQUEST,\n RESPONSE,\n ServerRequest,\n ServerResponse,\n} from '@analogjs/router/tokens';\n\nexport function provideServerContext({\n req,\n res,\n}: {\n req: ServerRequest;\n res: ServerResponse;\n}): StaticProvider[] {\n const baseUrl = getBaseUrl(req);\n\n if (import.meta.env.DEV) {\n ɵresetCompiledComponents();\n }\n\n return [\n { provide: SERVER_CONTEXT, useValue: 'ssr-analog' },\n { provide: REQUEST, useValue: req },\n { provide: RESPONSE, useValue: res },\n { provide: BASE_URL, useValue: baseUrl },\n ];\n}\n\nexport function getBaseUrl(req: ServerRequest) {\n const protocol = getRequestProtocol(req);\n const { originalUrl, headers } = req;\n const parsedUrl = new URL(\n '',\n `${protocol}://${headers.host}${\n originalUrl.endsWith('/')\n ? originalUrl.substring(0, originalUrl.length - 1)\n : originalUrl\n }`,\n );\n const baseUrl = parsedUrl.origin;\n\n return baseUrl;\n}\n\nexport function getRequestProtocol(\n req: ServerRequest,\n opts: { xForwardedProto?: boolean } = {},\n) {\n if (\n opts.xForwardedProto !== false &&\n req.headers['x-forwarded-proto'] === 'https'\n ) {\n return 'https';\n }\n\n return (req.connection as any)?.encrypted ? 'https' : 'http';\n}\n","import {\n assertInInjectionContext,\n inject,\n InjectionToken,\n makeStateKey,\n Provider,\n TransferState,\n} from '@angular/core';\n\nexport const STATIC_PROPS = new InjectionToken<Record<string, any>>(\n 'Static Props',\n);\n\nexport function provideStaticProps<T = Record<string, any>>(\n props: T,\n): Provider {\n return {\n provide: STATIC_PROPS,\n useFactory() {\n return props;\n },\n };\n}\n\nexport function injectStaticProps() {\n assertInInjectionContext(injectStaticProps);\n\n return inject(STATIC_PROPS);\n}\n\nexport function injectStaticOutputs<T>() {\n const transferState = inject(TransferState);\n const outputsKey = makeStateKey<T>('_analog_output');\n\n return {\n set(data: T) {\n transferState.set(outputsKey, data);\n },\n };\n}\n","import { ApplicationConfig, Type } from '@angular/core';\nimport {\n bootstrapApplication,\n type BootstrapContext,\n} from '@angular/platform-browser';\nimport {\n reflectComponentType,\n ɵConsole as Console,\n APP_ID,\n} from '@angular/core';\nimport {\n provideServerRendering,\n renderApplication,\n ɵSERVER_CONTEXT as SERVER_CONTEXT,\n} from '@angular/platform-server';\nimport { ServerContext } from '@analogjs/router/tokens';\nimport { createEvent, readBody, getHeader } from 'h3';\n\nimport { provideStaticProps } from './tokens';\n\ntype ComponentLoader = () => Promise<Type<unknown>>;\n\nexport function serverComponentRequest(serverContext: ServerContext) {\n const serverComponentId = getHeader(\n createEvent(serverContext.req, serverContext.res),\n 'X-Analog-Component',\n );\n\n if (\n !serverComponentId &&\n serverContext.req.url &&\n serverContext.req.url.startsWith('/_analog/components')\n ) {\n const componentId = serverContext.req.url.split('/')?.[3];\n\n return componentId;\n }\n\n return serverComponentId;\n}\n\nconst components = import.meta.glob([\n '/src/server/components/**/*.{ts,analog,ag}',\n]);\n\nexport async function renderServerComponent(\n url: string,\n serverContext: ServerContext,\n config?: ApplicationConfig,\n) {\n const componentReqId = serverComponentRequest(serverContext) as string;\n const { componentLoader, componentId } = getComponentLoader(componentReqId);\n\n if (!componentLoader) {\n return new Response(`Server Component Not Found ${componentId}`, {\n status: 404,\n });\n }\n\n const component = ((await componentLoader()) as any)[\n 'default'\n ] as Type<unknown>;\n\n if (!component) {\n return new Response(`No default export for ${componentId}`, {\n status: 422,\n });\n }\n\n const mirror = reflectComponentType(component);\n const selector = mirror?.selector.split(',')?.[0] || 'server-component';\n const event = createEvent(serverContext.req, serverContext.res);\n const body = (await readBody(event)) || {};\n const appId = `analog-server-${selector.toLowerCase()}-${new Date().getTime()}`;\n\n const bootstrap = (context?: BootstrapContext) =>\n bootstrapApplication(\n component,\n {\n providers: [\n provideServerRendering(),\n provideStaticProps(body),\n { provide: SERVER_CONTEXT, useValue: 'analog-server-component' },\n {\n provide: APP_ID,\n useFactory() {\n return appId;\n },\n },\n ...(config?.providers || []),\n ],\n },\n context,\n );\n\n const html = await renderApplication(bootstrap, {\n url,\n document: `<${selector}></${selector}>`,\n platformProviders: [\n {\n provide: Console,\n useFactory() {\n return {\n warn: () => {},\n log: () => {},\n };\n },\n },\n ],\n });\n\n const outputs = retrieveTransferredState(html, appId);\n const responseData: { html: string; outputs: Record<string, any> } = {\n html,\n outputs,\n };\n\n return new Response(JSON.stringify(responseData), {\n headers: {\n 'X-Analog-Component': 'true',\n },\n });\n}\n\nfunction getComponentLoader(componentReqId: string): {\n componentLoader: ComponentLoader | undefined;\n componentId: string;\n} {\n let _componentId = `/src/server/components/${componentReqId.toLowerCase()}`;\n let componentLoader: ComponentLoader | undefined = undefined;\n let componentId = _componentId;\n\n if (components[`${_componentId}.ts`]) {\n componentId = `${_componentId}.ts`;\n componentLoader = components[componentId] as ComponentLoader;\n }\n\n return { componentLoader, componentId };\n}\n\nfunction retrieveTransferredState(\n html: string,\n appId: string,\n): Record<string, unknown | undefined> {\n const regex = new RegExp(\n `<script id=\"${appId}-state\" type=\"application/json\">(.*?)<\\/script>`,\n );\n const match = html.match(regex);\n\n if (match) {\n const scriptContent = match[1];\n\n if (scriptContent) {\n try {\n const parsedContent: {\n _analog_output: Record<string, unknown | undefined>;\n } = JSON.parse(scriptContent);\n return parsedContent._analog_output || {};\n } catch (e) {\n console.warn('Exception while parsing static outputs for ' + appId, e);\n }\n }\n\n return {};\n } else {\n return {};\n }\n}\n","import {\n ApplicationConfig,\n Provider,\n Type,\n enableProdMode,\n} from '@angular/core';\nimport {\n bootstrapApplication,\n type BootstrapContext,\n} from '@angular/platform-browser';\nimport { renderApplication } from '@angular/platform-server';\nimport type { ServerContext } from '@analogjs/router/tokens';\n\nimport { provideServerContext } from './provide-server-context';\nimport {\n serverComponentRequest,\n renderServerComponent,\n} from './server-component-render';\n\nif (import.meta.env.PROD) {\n enableProdMode();\n}\n\n/**\n * Returns a function that accepts the navigation URL,\n * the root HTML, and server context.\n *\n * @param rootComponent\n * @param config\n * @param platformProviders\n * @returns Promise<string | Reponse>\n */\nexport function render(\n rootComponent: Type<unknown>,\n config: ApplicationConfig,\n platformProviders: Provider[] = [],\n) {\n function bootstrap(context?: BootstrapContext) {\n return bootstrapApplication(rootComponent, config, context);\n }\n\n return async function render(\n url: string,\n document: string,\n serverContext: ServerContext,\n ) {\n if (serverComponentRequest(serverContext)) {\n return await renderServerComponent(url, serverContext);\n }\n\n const html = await renderApplication(bootstrap, {\n document,\n url,\n platformProviders: [\n provideServerContext(serverContext),\n platformProviders,\n ],\n });\n\n return html;\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵresetCompiledComponents","SERVER_CONTEXT","Console"],"mappings":";;;;;;SAWgB,oBAAoB,CAAC,EACnC,GAAG,EACH,GAAG,GAIJ,EAAA;AACC,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC;IAE/B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACvB,QAAAA,wBAAwB,EAAE;;IAG5B,OAAO;AACL,QAAA,EAAE,OAAO,EAAEC,eAAc,EAAE,QAAQ,EAAE,YAAY,EAAE;AACnD,QAAA,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE;AACnC,QAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE;AACpC,QAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;KACzC;AACH;AAEM,SAAU,UAAU,CAAC,GAAkB,EAAA;AAC3C,IAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC;AACxC,IAAA,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,GAAG;AACpC,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,EAAE,EACF,CAAA,EAAG,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAA,EAC3B,WAAW,CAAC,QAAQ,CAAC,GAAG;AACtB,UAAE,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;AACjD,UAAE,WACN,CAAA,CAAE,CACH;AACD,IAAA,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM;AAEhC,IAAA,OAAO,OAAO;AAChB;SAEgB,kBAAkB,CAChC,GAAkB,EAClB,OAAsC,EAAE,EAAA;AAExC,IAAA,IACE,IAAI,CAAC,eAAe,KAAK,KAAK;QAC9B,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,OAAO,EAC5C;AACA,QAAA,OAAO,OAAO;;AAGhB,IAAA,OAAQ,GAAG,CAAC,UAAkB,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM;AAC9D;;ACnDO,MAAM,YAAY,GAAG,IAAI,cAAc,CAC5C,cAAc,CACf;AAEK,SAAU,kBAAkB,CAChC,KAAQ,EAAA;IAER,OAAO;AACL,QAAA,OAAO,EAAE,YAAY;QACrB,UAAU,GAAA;AACR,YAAA,OAAO,KAAK;SACb;KACF;AACH;SAEgB,iBAAiB,GAAA;IAC/B,wBAAwB,CAAC,iBAAiB,CAAC;AAE3C,IAAA,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B;SAEgB,mBAAmB,GAAA;AACjC,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAC3C,IAAA,MAAM,UAAU,GAAG,YAAY,CAAI,gBAAgB,CAAC;IAEpD,OAAO;AACL,QAAA,GAAG,CAAC,IAAO,EAAA;AACT,YAAA,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;SACpC;KACF;AACH;;ACjBM,SAAU,sBAAsB,CAAC,aAA4B,EAAA;AACjE,IAAA,MAAM,iBAAiB,GAAG,SAAS,CACjC,WAAW,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,EACjD,oBAAoB,CACrB;AAED,IAAA,IACE,CAAC,iBAAiB;QAClB,aAAa,CAAC,GAAG,CAAC,GAAG;QACrB,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC,EACvD;AACA,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzD,QAAA,OAAO,WAAW;;AAGpB,IAAA,OAAO,iBAAiB;AAC1B;AAEA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAClC,4CAA4C;AAC7C,CAAA,CAAC;AAEK,eAAe,qBAAqB,CACzC,GAAW,EACX,aAA4B,EAC5B,MAA0B,EAAA;AAE1B,IAAA,MAAM,cAAc,GAAG,sBAAsB,CAAC,aAAa,CAAW;IACtE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,cAAc,CAAC;IAE3E,IAAI,CAAC,eAAe,EAAE;AACpB,QAAA,OAAO,IAAI,QAAQ,CAAC,CAAA,2BAAA,EAA8B,WAAW,EAAE,EAAE;AAC/D,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA,CAAC;;IAGJ,MAAM,SAAS,GAAI,CAAC,MAAM,eAAe,EAAE,EACzC,SAAS,CACO;IAElB,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,OAAO,IAAI,QAAQ,CAAC,CAAA,sBAAA,EAAyB,WAAW,EAAE,EAAE;AAC1D,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA,CAAC;;AAGJ,IAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC;AAC9C,IAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,kBAAkB;AACvE,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC;IAC/D,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;AAC1C,IAAA,MAAM,KAAK,GAAG,CAAA,cAAA,EAAiB,QAAQ,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;IAE/E,MAAM,SAAS,GAAG,CAAC,OAA0B,KAC3C,oBAAoB,CAClB,SAAS,EACT;AACE,QAAA,SAAS,EAAE;AACT,YAAA,sBAAsB,EAAE;YACxB,kBAAkB,CAAC,IAAI,CAAC;AACxB,YAAA,EAAE,OAAO,EAAEA,eAAc,EAAE,QAAQ,EAAE,yBAAyB,EAAE;AAChE,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;gBACf,UAAU,GAAA;AACR,oBAAA,OAAO,KAAK;iBACb;AACF,aAAA;AACD,YAAA,IAAI,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;AAC7B,SAAA;KACF,EACD,OAAO,CACR;AAEH,IAAA,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE;QAC9C,GAAG;AACH,QAAA,QAAQ,EAAE,CAAA,CAAA,EAAI,QAAQ,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAA,CAAG;AACvC,QAAA,iBAAiB,EAAE;AACjB,YAAA;AACE,gBAAA,OAAO,EAAEC,QAAO;gBAChB,UAAU,GAAA;oBACR,OAAO;AACL,wBAAA,IAAI,EAAE,MAAK,GAAG;AACd,wBAAA,GAAG,EAAE,MAAK,GAAG;qBACd;iBACF;AACF,aAAA;AACF,SAAA;AACF,KAAA,CAAC;IAEF,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC;AACrD,IAAA,MAAM,YAAY,GAAmD;QACnE,IAAI;QACJ,OAAO;KACR;IAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;AAChD,QAAA,OAAO,EAAE;AACP,YAAA,oBAAoB,EAAE,MAAM;AAC7B,SAAA;AACF,KAAA,CAAC;AACJ;AAEA,SAAS,kBAAkB,CAAC,cAAsB,EAAA;IAIhD,IAAI,YAAY,GAAG,CAAA,uBAAA,EAA0B,cAAc,CAAC,WAAW,EAAE,EAAE;IAC3E,IAAI,eAAe,GAAgC,SAAS;IAC5D,IAAI,WAAW,GAAG,YAAY;AAE9B,IAAA,IAAI,UAAU,CAAC,CAAA,EAAG,YAAY,CAAA,GAAA,CAAK,CAAC,EAAE;AACpC,QAAA,WAAW,GAAG,CAAA,EAAG,YAAY,CAAA,GAAA,CAAK;AAClC,QAAA,eAAe,GAAG,UAAU,CAAC,WAAW,CAAoB;;AAG9D,IAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE;AACzC;AAEA,SAAS,wBAAwB,CAC/B,IAAY,EACZ,KAAa,EAAA;IAEb,MAAM,KAAK,GAAG,IAAI,MAAM,CACtB,CAAA,YAAA,EAAe,KAAK,CAAA,+CAAA,CAAiD,CACtE;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAE/B,IAAI,KAAK,EAAE;AACT,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;QAE9B,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI;gBACF,MAAM,aAAa,GAEf,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC7B,gBAAA,OAAO,aAAa,CAAC,cAAc,IAAI,EAAE;;YACzC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,IAAI,CAAC,6CAA6C,GAAG,KAAK,EAAE,CAAC,CAAC;;;AAI1E,QAAA,OAAO,EAAE;;SACJ;AACL,QAAA,OAAO,EAAE;;AAEb;;ACpJA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACxB,IAAA,cAAc,EAAE;AAClB;AAEA;;;;;;;;AAQG;AACG,SAAU,MAAM,CACpB,aAA4B,EAC5B,MAAyB,EACzB,oBAAgC,EAAE,EAAA;IAElC,SAAS,SAAS,CAAC,OAA0B,EAAA;QAC3C,OAAO,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC;;IAG7D,OAAO,eAAe,MAAM,CAC1B,GAAW,EACX,QAAgB,EAChB,aAA4B,EAAA;AAE5B,QAAA,IAAI,sBAAsB,CAAC,aAAa,CAAC,EAAE;AACzC,YAAA,OAAO,MAAM,qBAAqB,CAAC,GAAG,EAAE,aAAa,CAAC;;AAGxD,QAAA,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE;YAC9C,QAAQ;YACR,GAAG;AACH,YAAA,iBAAiB,EAAE;gBACjB,oBAAoB,CAAC,aAAa,CAAC;gBACnC,iBAAiB;AAClB,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;AACb,KAAC;AACH;;AC7DA;;AAEG;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, PLATFORM_ID, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER, Injector, makeStateKey, TransferState, input, output, Directive, InjectionToken, signal, effect,
|
|
2
|
+
import { inject, PLATFORM_ID, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER, Injector, makeStateKey, TransferState, input, output, Directive, InjectionToken, signal, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
import { HttpClient, HttpHeaders, ɵHTTP_ROOT_INTERCEPTOR_FNS as _HTTP_ROOT_INTERCEPTOR_FNS, HttpResponse, HttpRequest } from '@angular/common/http';
|
|
4
4
|
import { firstValueFrom, map, from, of, throwError, catchError } from 'rxjs';
|
|
5
5
|
import { Meta, DomSanitizer } from '@angular/platform-browser';
|
|
@@ -589,7 +589,7 @@ function requestContextInterceptor(req, next) {
|
|
|
589
589
|
|
|
590
590
|
class FormAction {
|
|
591
591
|
constructor() {
|
|
592
|
-
this.action = input('');
|
|
592
|
+
this.action = input('', ...(ngDevMode ? [{ debugName: "action" }] : []));
|
|
593
593
|
this.onSuccess = output();
|
|
594
594
|
this.onError = output();
|
|
595
595
|
this.state = output();
|
|
@@ -670,10 +670,10 @@ class FormAction {
|
|
|
670
670
|
const essence = mime[0];
|
|
671
671
|
return essence === 'application/json';
|
|
672
672
|
}
|
|
673
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
674
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
673
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: FormAction, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
674
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.0", type: FormAction, isStandalone: true, selector: "form[action],form[method]", inputs: { action: { classPropertyName: "action", publicName: "action", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSuccess: "onSuccess", onError: "onError", state: "state" }, host: { listeners: { "submit": "submitted($event)" } }, ngImport: i0 }); }
|
|
675
675
|
}
|
|
676
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
676
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: FormAction, decorators: [{
|
|
677
677
|
type: Directive,
|
|
678
678
|
args: [{
|
|
679
679
|
selector: 'form[action],form[method]',
|
|
@@ -707,7 +707,7 @@ function withDebugRoutes() {
|
|
|
707
707
|
const routes = [
|
|
708
708
|
{
|
|
709
709
|
path: '__analog/routes',
|
|
710
|
-
loadComponent: () => import('./analogjs-router-debug.page-
|
|
710
|
+
loadComponent: () => import('./analogjs-router-debug.page-C7mEWSZu.mjs'),
|
|
711
711
|
},
|
|
712
712
|
];
|
|
713
713
|
return {
|
|
@@ -726,12 +726,12 @@ function withDebugRoutes() {
|
|
|
726
726
|
*/
|
|
727
727
|
class ServerOnly {
|
|
728
728
|
constructor() {
|
|
729
|
-
this.component = input.required();
|
|
730
|
-
this.props = input();
|
|
729
|
+
this.component = input.required(...(ngDevMode ? [{ debugName: "component" }] : []));
|
|
730
|
+
this.props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
731
731
|
this.outputs = output();
|
|
732
732
|
this.http = inject(HttpClient);
|
|
733
733
|
this.sanitizer = inject(DomSanitizer);
|
|
734
|
-
this.content = signal('');
|
|
734
|
+
this.content = signal('', ...(ngDevMode ? [{ debugName: "content" }] : []));
|
|
735
735
|
this.route = inject(ActivatedRoute, { optional: true });
|
|
736
736
|
this.baseURL = injectBaseURL();
|
|
737
737
|
this.transferState = inject(TransferState);
|
|
@@ -787,10 +787,10 @@ class ServerOnly {
|
|
|
787
787
|
}
|
|
788
788
|
return `${baseURL}/_analog/components/${componentId}`;
|
|
789
789
|
}
|
|
790
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
791
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
790
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ServerOnly, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
791
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.0", type: ServerOnly, isStandalone: true, selector: "server-only,ServerOnly,Server", inputs: { component: { classPropertyName: "component", publicName: "component", isSignal: true, isRequired: true, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outputs: "outputs" }, ngImport: i0, template: ` <div [innerHTML]="content()"></div> `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
792
792
|
}
|
|
793
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
793
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ServerOnly, decorators: [{
|
|
794
794
|
type: Component,
|
|
795
795
|
args: [{
|
|
796
796
|
selector: 'server-only,ServerOnly,Server',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analogjs-router.mjs","sources":["../../../../packages/router/src/lib/meta-tags.ts","../../../../packages/router/src/lib/endpoints.ts","../../../../packages/router/src/lib/inject-route-endpoint-url.ts","../../../../packages/router/src/lib/route-config.ts","../../../../packages/router/src/lib/markdown-helpers.ts","../../../../packages/router/src/lib/constants.ts","../../../../packages/router/src/lib/routes.ts","../../../../packages/router/src/lib/define-route.ts","../../../../packages/router/src/lib/cookie-interceptor.ts","../../../../packages/router/src/lib/provide-file-router.ts","../../../../packages/router/src/lib/inject-load.ts","../../../../packages/router/src/lib/get-load-resolver.ts","../../../../packages/router/src/lib/cache-key.ts","../../../../packages/router/src/lib/request-context.ts","../../../../packages/router/src/lib/form-action.directive.ts","../../../../packages/router/src/lib/debug/routes.ts","../../../../packages/router/src/lib/debug/index.ts","../../../../packages/router/src/lib/server.component.ts","../../../../packages/router/src/analogjs-router.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport { Meta, MetaDefinition as NgMetaTag } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\nexport const ROUTE_META_TAGS_KEY = Symbol(\n '@analogjs/router Route Meta Tags Key',\n);\n\nconst CHARSET_KEY = 'charset';\nconst HTTP_EQUIV_KEY = 'httpEquiv';\n// httpEquiv selector key needs to be in kebab case format\nconst HTTP_EQUIV_SELECTOR_KEY = 'http-equiv';\nconst NAME_KEY = 'name';\nconst PROPERTY_KEY = 'property';\nconst CONTENT_KEY = 'content';\n\nexport type MetaTag =\n | (CharsetMetaTag & ExcludeRestMetaTagKeys<typeof CHARSET_KEY>)\n | (HttpEquivMetaTag & ExcludeRestMetaTagKeys<typeof HTTP_EQUIV_KEY>)\n | (NameMetaTag & ExcludeRestMetaTagKeys<typeof NAME_KEY>)\n | (PropertyMetaTag & ExcludeRestMetaTagKeys<typeof PROPERTY_KEY>);\n\ntype CharsetMetaTag = { [CHARSET_KEY]: string };\ntype HttpEquivMetaTag = { [HTTP_EQUIV_KEY]: string; [CONTENT_KEY]: string };\ntype NameMetaTag = { [NAME_KEY]: string; [CONTENT_KEY]: string };\ntype PropertyMetaTag = { [PROPERTY_KEY]: string; [CONTENT_KEY]: string };\n\ntype MetaTagKey =\n | typeof CHARSET_KEY\n | typeof HTTP_EQUIV_KEY\n | typeof NAME_KEY\n | typeof PROPERTY_KEY;\ntype ExcludeRestMetaTagKeys<Key extends MetaTagKey> = {\n [K in Exclude<MetaTagKey, Key>]?: never;\n};\n\ntype MetaTagSelector =\n | typeof CHARSET_KEY\n | `${\n | typeof HTTP_EQUIV_SELECTOR_KEY\n | typeof NAME_KEY\n | typeof PROPERTY_KEY}=\"${string}\"`;\ntype MetaTagMap = Record<MetaTagSelector, MetaTag>;\n\nexport function updateMetaTagsOnRouteChange(): void {\n const router = inject(Router);\n const metaService = inject(Meta);\n\n router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n const metaTagMap = getMetaTagMap(router.routerState.snapshot.root);\n\n for (const metaTagSelector in metaTagMap) {\n const metaTag = metaTagMap[\n metaTagSelector as MetaTagSelector\n ] as NgMetaTag;\n metaService.updateTag(metaTag, metaTagSelector);\n }\n });\n}\n\nfunction getMetaTagMap(route: ActivatedRouteSnapshot): MetaTagMap {\n const metaTagMap = {} as MetaTagMap;\n let currentRoute: ActivatedRouteSnapshot | null = route;\n\n while (currentRoute) {\n const metaTags: MetaTag[] = currentRoute.data[ROUTE_META_TAGS_KEY] ?? [];\n for (const metaTag of metaTags) {\n metaTagMap[getMetaTagSelector(metaTag)] = metaTag;\n }\n\n currentRoute = currentRoute.firstChild;\n }\n\n return metaTagMap;\n}\n\nfunction getMetaTagSelector(metaTag: MetaTag): MetaTagSelector {\n if (metaTag.name) {\n return `${NAME_KEY}=\"${metaTag.name}\"`;\n }\n\n if (metaTag.property) {\n return `${PROPERTY_KEY}=\"${metaTag.property}\"`;\n }\n\n if (metaTag.httpEquiv) {\n return `${HTTP_EQUIV_SELECTOR_KEY}=\"${metaTag.httpEquiv}\"`;\n }\n\n return CHARSET_KEY;\n}\n","export const ANALOG_META_KEY = Symbol(\n '@analogjs/router Analog Route Metadata Key',\n);\n\n/**\n * This variable reference is replaced with a glob of all route endpoints.\n */\nexport let ANALOG_PAGE_ENDPOINTS: any = {};\n","import type { ActivatedRouteSnapshot, Route } from '@angular/router';\nimport { injectBaseURL, injectAPIPrefix } from '@analogjs/router/tokens';\n\nimport { ANALOG_META_KEY } from './endpoints';\n\nexport function injectRouteEndpointURL(route: ActivatedRouteSnapshot) {\n const routeConfig = route.routeConfig as Route & {\n [ANALOG_META_KEY]: { endpoint: string; endpointKey: string };\n };\n\n const apiPrefix = injectAPIPrefix();\n const baseUrl = injectBaseURL();\n const { queryParams, fragment: hash, params, parent } = route;\n const segment = parent?.url.map((segment) => segment.path).join('/') || '';\n const url = new URL(\n '',\n import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] ||\n baseUrl ||\n (typeof window !== 'undefined' && window.location.origin\n ? window.location.origin\n : ''),\n );\n url.pathname = `${\n url.pathname.endsWith('/') ? url.pathname : url.pathname + '/'\n }${apiPrefix}/_analog${routeConfig[ANALOG_META_KEY].endpoint}`;\n url.search = `${new URLSearchParams(queryParams).toString()}`;\n url.hash = hash ?? '';\n\n Object.keys(params).forEach((param) => {\n url.pathname = url.pathname.replace(`[${param}]`, params[param]);\n });\n url.pathname = url.pathname.replace('**', segment);\n\n return url;\n}\n","import { inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport type { Route } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\nimport { RedirectRouteMeta, RouteConfig, RouteMeta } from './models';\nimport { ROUTE_META_TAGS_KEY } from './meta-tags';\nimport { ANALOG_PAGE_ENDPOINTS, ANALOG_META_KEY } from './endpoints';\nimport { injectRouteEndpointURL } from './inject-route-endpoint-url';\n\nexport function toRouteConfig(routeMeta: RouteMeta | undefined): RouteConfig {\n if (routeMeta && isRedirectRouteMeta(routeMeta)) {\n return routeMeta;\n }\n\n let { meta, ...routeConfig } = routeMeta ?? {};\n\n if (Array.isArray(meta)) {\n routeConfig.data = { ...routeConfig.data, [ROUTE_META_TAGS_KEY]: meta };\n } else if (typeof meta === 'function') {\n routeConfig.resolve = {\n ...routeConfig.resolve,\n [ROUTE_META_TAGS_KEY]: meta,\n };\n }\n\n if (!routeConfig) {\n routeConfig = {};\n }\n\n routeConfig.runGuardsAndResolvers =\n routeConfig.runGuardsAndResolvers ?? 'paramsOrQueryParamsChange';\n routeConfig.resolve = {\n ...routeConfig.resolve,\n load: async (route) => {\n const routeConfig = route.routeConfig as Route & {\n [ANALOG_META_KEY]: { endpoint: string; endpointKey: string };\n };\n\n if (ANALOG_PAGE_ENDPOINTS[routeConfig[ANALOG_META_KEY].endpointKey]) {\n const http = inject(HttpClient);\n const url = injectRouteEndpointURL(route);\n\n if (\n !!import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] &&\n (globalThis as any).$fetch\n ) {\n return (globalThis as any).$fetch(url.pathname);\n }\n\n return firstValueFrom(http.get(`${url.href}`));\n }\n\n return {};\n },\n };\n\n return routeConfig;\n}\n\nfunction isRedirectRouteMeta(\n routeMeta: RouteMeta,\n): routeMeta is RedirectRouteMeta {\n return !!routeMeta.redirectTo;\n}\n","import { inject } from '@angular/core';\nimport { RouteExport } from './models';\n\ndeclare const Zone: any;\n\n// The Zone is currently enabled by default, so we wouldn't need this check.\n// However, leaving this open space will be useful if zone.js becomes optional\n// in the future. This means we won't have to modify the current code, and it will\n// continue to work seamlessly.\nconst isNgZoneEnabled = typeof Zone !== 'undefined' && !!Zone.root;\n\nexport function toMarkdownModule(\n markdownFileFactory: () => Promise<string>,\n): () => Promise<RouteExport> {\n return async () => {\n const createLoader = () =>\n Promise.all([import('@analogjs/content'), markdownFileFactory()]);\n\n const [\n { parseRawContentFile, MarkdownRouteComponent, ContentRenderer },\n markdownFile,\n ]: [typeof import('@analogjs/content'), string] = await (isNgZoneEnabled\n ? // We are not able to use `runOutsideAngular` because we are not inside\n // an injection context to retrieve the `NgZone` instance.\n // The `Zone.root.run` is required when the code is running in the\n // browser since asynchronous tasks being scheduled in the current context\n // are a reason for unnecessary change detection cycles.\n Zone.root.run(createLoader)\n : createLoader());\n\n const { content, attributes } = parseRawContentFile(markdownFile);\n const { title, meta } = attributes;\n\n return {\n default: MarkdownRouteComponent,\n routeMeta: {\n data: { _analogContent: content },\n title,\n meta,\n resolve: {\n renderedAnalogContent: async () => {\n const contentRenderer = inject(ContentRenderer);\n return contentRenderer.render(content);\n },\n },\n },\n };\n };\n}\n","export const ENDPOINT_EXTENSION = '.server.ts';\nexport const APP_DIR = 'src/app';\n","import type { Route } from '@angular/router';\n\nimport type { RouteExport, RouteMeta } from './models';\nimport { toRouteConfig } from './route-config';\nimport { toMarkdownModule } from './markdown-helpers';\nimport { ENDPOINT_EXTENSION } from './constants';\nimport { ANALOG_META_KEY } from './endpoints';\n\n/**\n * This variable reference is replaced with a glob of all page routes.\n */\nexport let ANALOG_ROUTE_FILES = {};\n\n/**\n * This variable reference is replaced with a glob of all content routes.\n */\nexport let ANALOG_CONTENT_ROUTE_FILES = {};\n\nexport type Files = Record<string, () => Promise<RouteExport | string>>;\n\ntype RawRoute = {\n filename: string | null;\n rawSegment: string;\n ancestorRawSegments: string[];\n segment: string;\n level: number;\n children: RawRoute[];\n};\n\ntype RawRouteMap = Record<string, RawRoute>;\n\ntype RawRouteByLevelMap = Record<number, RawRouteMap>;\n\n/**\n * A function used to parse list of files and create configuration of routes.\n *\n * @param files\n * @returns Array of routes\n */\nexport function createRoutes(files: Files, debug = false): Route[] {\n const filenames = Object.keys(files);\n\n if (filenames.length === 0) {\n return [];\n }\n\n // map filenames to raw routes and group them by level\n const rawRoutesByLevelMap = filenames.reduce((acc, filename) => {\n const rawPath = toRawPath(filename);\n const rawSegments = rawPath.split('/');\n // nesting level starts at 0\n // rawPath: /products => level: 0\n // rawPath: /products/:id => level: 1\n const level = rawSegments.length - 1;\n const rawSegment = rawSegments[level];\n const ancestorRawSegments = rawSegments.slice(0, level);\n\n return {\n ...acc,\n [level]: {\n ...acc[level],\n [rawPath]: {\n filename,\n rawSegment,\n ancestorRawSegments,\n segment: toSegment(rawSegment),\n level,\n children: [],\n },\n },\n };\n }, {} as RawRouteByLevelMap);\n\n const allLevels = Object.keys(rawRoutesByLevelMap).map(Number);\n const maxLevel = Math.max(...allLevels);\n\n // add each raw route to its parent's children array\n for (let level = maxLevel; level > 0; level--) {\n const rawRoutesMap = rawRoutesByLevelMap[level];\n const rawPaths = Object.keys(rawRoutesMap);\n\n for (const rawPath of rawPaths) {\n const rawRoute = rawRoutesMap[rawPath];\n const parentRawPath = rawRoute.ancestorRawSegments.join('/');\n const parentRawSegmentIndex = rawRoute.ancestorRawSegments.length - 1;\n const parentRawSegment =\n rawRoute.ancestorRawSegments[parentRawSegmentIndex];\n\n // create the parent level and/or raw route if it does not exist\n // parent route won't exist for nested routes that don't have a layout route\n rawRoutesByLevelMap[level - 1] ||= {};\n rawRoutesByLevelMap[level - 1][parentRawPath] ||= {\n filename: null,\n rawSegment: parentRawSegment,\n ancestorRawSegments: rawRoute.ancestorRawSegments.slice(\n 0,\n parentRawSegmentIndex,\n ),\n segment: toSegment(parentRawSegment),\n level: level - 1,\n children: [],\n };\n\n rawRoutesByLevelMap[level - 1][parentRawPath].children.push(rawRoute);\n }\n }\n\n // only take raw routes from the root level\n // since they already contain nested routes as their children\n const rootRawRoutesMap = rawRoutesByLevelMap[0];\n const rawRoutes = Object.keys(rootRawRoutesMap).map(\n (segment) => rootRawRoutesMap[segment],\n );\n sortRawRoutes(rawRoutes);\n\n return toRoutes(rawRoutes, files, debug);\n}\n\nfunction toRawPath(filename: string): string {\n return filename\n .replace(\n // convert to relative path and remove file extension\n /^(?:[a-zA-Z]:[\\\\/])?(.*?)[\\\\/](?:routes|pages)[\\\\/]|(?:[\\\\/](?:app[\\\\/](?:routes|pages)[\\\\/]))|(\\.page\\.(js|ts|analog|ag)$)|(\\.(ts|md|analog|ag)$)/g,\n '',\n )\n .replace(/\\[\\.{3}.+\\]/, '**') // [...not-found] => **\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [id] => :id\n}\n\nfunction toSegment(rawSegment: string): string {\n return rawSegment\n .replace(/index|\\(.*?\\)/g, '') // replace named empty segments\n .replace(/\\.|\\/+/g, '/') // replace dots with slashes and remove redundant slashes\n .replace(/^\\/+|\\/+$/g, ''); // remove trailing slashes\n}\n\nfunction toRoutes(rawRoutes: RawRoute[], files: Files, debug = false): Route[] {\n const routes: Route[] = [];\n\n for (const rawRoute of rawRoutes) {\n const children: Route[] | undefined =\n rawRoute.children.length > 0\n ? toRoutes(rawRoute.children, files, debug)\n : undefined;\n let module: (() => Promise<RouteExport>) | undefined = undefined;\n let analogMeta: { endpoint: string; endpointKey: string } | undefined =\n undefined;\n\n if (rawRoute.filename) {\n const isMarkdownFile = rawRoute.filename.endsWith('.md');\n\n if (!debug) {\n module = isMarkdownFile\n ? toMarkdownModule(files[rawRoute.filename] as () => Promise<string>)\n : (files[rawRoute.filename] as () => Promise<RouteExport>);\n }\n\n const endpointKey = rawRoute.filename.replace(\n /\\.page\\.(ts|analog|ag)$/,\n ENDPOINT_EXTENSION,\n );\n\n // get endpoint path\n const rawEndpoint = rawRoute.filename\n .replace(/\\.page\\.(ts|analog|ag)$/, '')\n .replace(/\\[\\.{3}.+\\]/, '**') // [...not-found] => **\n .replace(/^(.*?)\\/pages/, '/pages');\n\n // replace periods, remove (index) paths\n const endpoint = (rawEndpoint || '')\n .replace(/\\./g, '/')\n .replace(/\\/\\((.*?)\\)$/, '/-$1-');\n\n analogMeta = {\n endpoint,\n endpointKey,\n };\n }\n\n type DebugRoute = Route & {\n filename?: string | null | undefined;\n isLayout?: boolean;\n };\n\n const route: Route & { meta?: typeof analogMeta } & DebugRoute = module\n ? {\n path: rawRoute.segment,\n loadChildren: () =>\n module!().then((m) => {\n if (import.meta.env.DEV) {\n const hasModuleDefault = !!m.default;\n const hasRedirect = !!m.routeMeta?.redirectTo;\n\n if (!hasModuleDefault && !hasRedirect) {\n console.warn(\n `[Analog] Missing default export at ${rawRoute.filename}`,\n );\n }\n }\n\n return [\n {\n path: '',\n component: m.default,\n ...toRouteConfig(m.routeMeta as RouteMeta | undefined),\n children,\n [ANALOG_META_KEY]: analogMeta,\n },\n ];\n }),\n }\n : {\n path: rawRoute.segment,\n ...(debug\n ? {\n filename: rawRoute.filename ? rawRoute.filename : undefined,\n isLayout: children && children.length > 0 ? true : false,\n }\n : {}),\n children,\n };\n\n routes.push(route);\n }\n\n return routes;\n}\n\nfunction sortRawRoutes(rawRoutes: RawRoute[]): void {\n rawRoutes.sort((a, b) => {\n let segmentA = deprioritizeSegment(a.segment);\n let segmentB = deprioritizeSegment(b.segment);\n\n // prioritize routes with fewer children\n if (a.children.length > b.children.length) {\n segmentA = `~${segmentA}`;\n } else if (a.children.length < b.children.length) {\n segmentB = `~${segmentB}`;\n }\n\n return segmentA > segmentB ? 1 : -1;\n });\n\n for (const rawRoute of rawRoutes) {\n sortRawRoutes(rawRoute.children);\n }\n}\n\nfunction deprioritizeSegment(segment: string): string {\n // deprioritize param and wildcard segments\n return segment.replace(':', '~~').replace('**', '~~~~');\n}\n\nexport const routes: Route[] = createRoutes({\n ...ANALOG_ROUTE_FILES,\n ...ANALOG_CONTENT_ROUTE_FILES,\n});\n","import { inject } from '@angular/core';\nimport { Route as NgRoute, Router } from '@angular/router';\nimport { ActivatedRoute } from '@angular/router';\n\ntype RouteOmitted =\n | 'component'\n | 'loadComponent'\n | 'loadChildren'\n | 'path'\n | 'pathMatch';\n\ntype RestrictedRoute = Omit<NgRoute, RouteOmitted>;\n\n/**\n * @deprecated Use `RouteMeta` type instead.\n * For more info see: https://github.com/analogjs/analog/issues/223\n *\n * Defines additional route config metadata. This\n * object is merged into the route config with\n * the predefined file-based route.\n *\n * @usageNotes\n *\n * ```\n * import { Component } from '@angular/core';\n * import { defineRouteMeta } from '@analogjs/router';\n *\n * export const routeMeta = defineRouteMeta({\n * title: 'Welcome'\n * });\n *\n * @Component({\n * template: `Home`,\n * standalone: true,\n * })\n * export default class HomeComponent {}\n * ```\n *\n * @param route\n * @returns\n */\nexport const defineRouteMeta = (route: RestrictedRoute) => {\n return route;\n};\n\n/**\n * Returns the instance of Angular Router\n *\n * @returns The router\n */\nexport const injectRouter = () => {\n return inject(Router);\n};\n\n/**\n * Returns the instance of the Activate Route for the component\n *\n * @returns The activated route\n */\nexport const injectActivatedRoute = () => {\n return inject(ActivatedRoute);\n};\n","import { isPlatformServer } from '@angular/common';\nimport { HttpHandlerFn, HttpHeaders, HttpRequest } from '@angular/common/http';\nimport { PLATFORM_ID, inject } from '@angular/core';\nimport { injectRequest } from '@analogjs/router/tokens';\n\nexport function cookieInterceptor(\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n location = inject(PLATFORM_ID),\n serverRequest = injectRequest(),\n) {\n if (isPlatformServer(location) && req.url.includes('/_analog/')) {\n let headers = new HttpHeaders();\n const cookies = serverRequest?.headers.cookie;\n headers = headers.set('cookie', cookies ?? '');\n\n const cookiedRequest = req.clone({\n headers,\n });\n\n return next(cookiedRequest);\n } else {\n return next(req);\n }\n}\n","import {\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport { provideRouter, RouterFeatures, ROUTES, Routes } from '@angular/router';\nimport { API_PREFIX } from '@analogjs/router/tokens';\nimport { ɵHTTP_ROOT_INTERCEPTOR_FNS as HTTP_ROOT_INTERCEPTOR_FNS } from '@angular/common/http';\n\nimport { routes } from './routes';\nimport { updateMetaTagsOnRouteChange } from './meta-tags';\nimport { cookieInterceptor } from './cookie-interceptor';\n\ndeclare const ANALOG_API_PREFIX: string;\n\n/**\n * Sets up providers for the Angular router, and registers\n * file-based routes. Additional features can be provided\n * to further configure the behavior of the router.\n *\n * @param features\n * @returns Providers and features to configure the router with routes\n */\nexport function provideFileRouter(\n ...features: RouterFeatures[]\n): EnvironmentProviders {\n const extraRoutesFeature = features.filter((feat) => feat.ɵkind >= 100);\n const routerFeatures = features.filter((feat) => feat.ɵkind < 100);\n\n return makeEnvironmentProviders([\n extraRoutesFeature.map((erf) => erf.ɵproviders),\n provideRouter(routes, ...routerFeatures),\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => updateMetaTagsOnRouteChange(),\n },\n {\n provide: HTTP_ROOT_INTERCEPTOR_FNS,\n multi: true,\n useValue: cookieInterceptor,\n },\n {\n provide: API_PREFIX,\n useFactory() {\n return typeof ANALOG_API_PREFIX !== 'undefined'\n ? ANALOG_API_PREFIX\n : 'api';\n },\n },\n ]);\n}\n\n/**\n * Provides extra custom routes in addition to the routes\n * discovered from the filesystem-based routing. These routes are\n * inserted before the filesystem-based routes, and take priority in\n * route matching.\n */\nexport function withExtraRoutes(routes: Routes): RouterFeatures {\n return {\n ɵkind: 100 as number,\n ɵproviders: [{ provide: ROUTES, useValue: routes, multi: true }],\n };\n}\n","import { Injector, inject } from '@angular/core';\nimport { ActivatedRoute, Data } from '@angular/router';\nimport { Observable, map } from 'rxjs';\n\nimport { PageServerLoad } from './route-types';\n\nexport function injectLoad<\n T extends (pageServerLoad: PageServerLoad) => Promise<any>,\n>(options?: { injector?: Injector }): Observable<Awaited<ReturnType<T>>> {\n const injector = options?.injector ?? inject(Injector);\n const route = injector.get(ActivatedRoute);\n\n return route.data.pipe(\n map<Data, Awaited<ReturnType<T>>>((data) => data['load']),\n );\n}\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\n/**\n * Get server load resolver data for the route\n *\n * @param route Provides the route to get server load resolver\n * @returns Returns server load resolver data for the route\n */\nexport async function getLoadResolver<T>(\n route: ActivatedRouteSnapshot,\n): Promise<T> {\n return route.routeConfig?.resolve?.['load']?.(route);\n}\n","import { HttpParams, HttpRequest } from '@angular/common/http';\nimport { StateKey, makeStateKey } from '@angular/core';\n\nfunction sortAndConcatParams(params: HttpParams | URLSearchParams): string {\n return [...params.keys()]\n .sort()\n .map((k) => `${k}=${params.getAll(k)}`)\n .join('&');\n}\n\nexport function makeCacheKey(\n request: HttpRequest<any>,\n mappedRequestUrl: string,\n): StateKey<unknown> {\n // make the params encoded same as a url so it's easy to identify\n const { params, method, responseType } = request;\n const encodedParams = sortAndConcatParams(params);\n\n let serializedBody = request.serializeBody();\n if (serializedBody instanceof URLSearchParams) {\n serializedBody = sortAndConcatParams(serializedBody);\n } else if (typeof serializedBody !== 'string') {\n serializedBody = '';\n }\n\n const key = [\n method,\n responseType,\n mappedRequestUrl,\n serializedBody,\n encodedParams,\n ].join('|');\n\n const hash = generateHash(key);\n\n return makeStateKey(hash);\n}\n\nfunction generateHash(str: string) {\n let hash = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n let chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return `${hash}`;\n}\n","import { TransferState, inject, makeStateKey } from '@angular/core';\nimport {\n HttpHandlerFn,\n HttpHeaders,\n HttpRequest,\n HttpResponse,\n} from '@angular/common/http';\n\nimport { from, of } from 'rxjs';\n\nimport { injectBaseURL, injectAPIPrefix } from '@analogjs/router/tokens';\n\nimport { makeCacheKey } from './cache-key';\n\n/**\n * Interceptor that is server-aware when making HttpClient requests.\n * Server-side requests use the full URL\n * Prerendering uses the internal Nitro $fetch function, along with state transfer\n * Client-side requests use the window.location.origin\n *\n * @param req HttpRequest<unknown>\n * @param next HttpHandlerFn\n * @returns\n */\nexport function requestContextInterceptor(\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n) {\n const apiPrefix = injectAPIPrefix();\n const baseUrl = injectBaseURL();\n const transferState = inject(TransferState);\n\n // during prerendering with Nitro\n if (\n typeof global !== 'undefined' &&\n global.$fetch &&\n baseUrl &&\n (req.url.startsWith('/') ||\n req.url.startsWith(baseUrl) ||\n req.url.startsWith(`/${apiPrefix}`))\n ) {\n const requestUrl = new URL(req.url, baseUrl);\n const cacheKey = makeCacheKey(req, new URL(requestUrl).pathname);\n const storeKey = makeStateKey<unknown>(`analog_${cacheKey}`);\n const fetchUrl = requestUrl.pathname;\n\n const responseType =\n req.responseType === 'arraybuffer' ? 'arrayBuffer' : req.responseType;\n\n return from(\n global.$fetch\n .raw(fetchUrl, {\n method: req.method as any,\n body: req.body ? req.body : undefined,\n params: requestUrl.searchParams,\n responseType,\n headers: req.headers.keys().reduce((hdrs, current) => {\n return {\n ...hdrs,\n [current]: req.headers.get(current),\n };\n }, {}),\n })\n .then((res) => {\n const cacheResponse = {\n body: res._data,\n headers: new HttpHeaders(res.headers),\n status: 200,\n statusText: 'OK',\n url: fetchUrl,\n };\n const transferResponse = new HttpResponse(cacheResponse);\n\n transferState.set(storeKey, cacheResponse);\n return transferResponse;\n }),\n );\n }\n\n // on the client\n if (\n !import.meta.env.SSR &&\n (req.url.startsWith('/') || req.url.includes('/_analog/'))\n ) {\n // /_analog/ requests are full URLs\n const requestUrl = req.url.includes('/_analog/')\n ? req.url\n : `${window.location.origin}${req.url}`;\n const cacheKey = makeCacheKey(req, new URL(requestUrl).pathname);\n const storeKey = makeStateKey<unknown>(`analog_${cacheKey}`);\n const cacheRestoreResponse = transferState.get(storeKey, null);\n\n if (cacheRestoreResponse) {\n transferState.remove(storeKey);\n return of(new HttpResponse(cacheRestoreResponse));\n }\n\n return next(\n req.clone({\n url: requestUrl,\n }),\n );\n }\n\n // on the server\n if (baseUrl && (req.url.startsWith('/') || req.url.startsWith(baseUrl))) {\n const requestUrl =\n req.url.startsWith(baseUrl) && !req.url.startsWith('/')\n ? req.url\n : `${baseUrl}${req.url}`;\n\n return next(\n req.clone({\n url: requestUrl,\n }),\n );\n }\n\n return next(req);\n}\n","import { Directive, inject, input, output } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\n\nimport { injectRouteEndpointURL } from './inject-route-endpoint-url';\n\n@Directive({\n selector: 'form[action],form[method]',\n host: {\n '(submit)': `submitted($event)`,\n },\n standalone: true,\n})\nexport class FormAction {\n action = input<string>('');\n onSuccess = output<unknown>();\n onError = output<unknown>();\n state = output<\n 'submitting' | 'error' | 'redirect' | 'success' | 'navigate'\n >();\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private path = this._getPath();\n\n submitted($event: { target: HTMLFormElement } & Event) {\n $event.preventDefault();\n\n this.state.emit('submitting');\n const body = new FormData($event.target);\n\n if ($event.target.method.toUpperCase() === 'GET') {\n this._handleGet(body, this.router.url);\n } else {\n this._handlePost(body, this.path, $event);\n }\n }\n\n private _handleGet(body: FormData, path: string) {\n const params: Params = {};\n body.forEach((formVal, formKey) => (params[formKey] = formVal));\n\n this.state.emit('navigate');\n const url = path.split('?')[0];\n this.router.navigate([url], {\n queryParams: params,\n onSameUrlNavigation: 'reload',\n });\n }\n\n private _handlePost(\n body: FormData,\n path: string,\n $event: { target: HTMLFormElement } & Event,\n ) {\n fetch(path, {\n method: $event.target.method,\n body,\n })\n .then((res) => {\n if (res.ok) {\n if (res.redirected) {\n const redirectUrl = new URL(res.url).pathname;\n this.state.emit('redirect');\n this.router.navigate([redirectUrl]);\n } else if (this._isJSON(res.headers.get('Content-type'))) {\n res.json().then((result) => {\n this.onSuccess.emit(result);\n this.state.emit('success');\n });\n } else {\n res.text().then((result) => {\n this.onSuccess.emit(result);\n this.state.emit('success');\n });\n }\n } else {\n if (res.headers.get('X-Analog-Errors')) {\n res.json().then((errors: unknown) => {\n this.onError.emit(errors);\n this.state.emit('error');\n });\n } else {\n this.state.emit('error');\n }\n }\n })\n .catch((_) => {\n this.state.emit('error');\n });\n }\n\n private _getPath() {\n if (this.route) {\n return injectRouteEndpointURL(this.route.snapshot).pathname;\n }\n\n return `/api/_analog/pages${window.location.pathname}`;\n }\n\n private _isJSON(contentType: string | null): boolean {\n const mime = contentType ? contentType.split(';') : [];\n const essence = mime[0];\n\n return essence === 'application/json';\n }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { Route } from '@angular/router';\n\nimport {\n ANALOG_CONTENT_ROUTE_FILES,\n ANALOG_ROUTE_FILES,\n createRoutes,\n} from '../routes';\n\nexport const DEBUG_ROUTES = new InjectionToken(\n '@analogjs/router debug routes',\n {\n providedIn: 'root',\n factory() {\n const debugRoutes = createRoutes(\n {\n ...ANALOG_ROUTE_FILES,\n ...ANALOG_CONTENT_ROUTE_FILES,\n },\n true,\n );\n\n return debugRoutes as (Route & DebugRoute)[];\n },\n },\n);\n\nexport type DebugRoute = {\n path: string;\n filename: string;\n isLayout: boolean;\n children?: DebugRoute[];\n};\n\nexport function injectDebugRoutes() {\n return inject(DEBUG_ROUTES);\n}\n","import { ROUTES } from '@angular/router';\n\n/**\n * Provides routes that provide additional\n * pages for displaying and debugging\n * routes.\n */\nexport function withDebugRoutes() {\n const routes = [\n {\n path: '__analog/routes',\n loadComponent: () => import('./debug.page'),\n },\n ];\n\n return {\n ɵkind: 101 as number,\n ɵproviders: [{ provide: ROUTES, useValue: routes, multi: true }],\n };\n}\n","import {\n HttpClient,\n HttpHeaders,\n HttpRequest,\n HttpResponse,\n} from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n makeStateKey,\n output,\n signal,\n TransferState,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { injectBaseURL } from '@analogjs/router/tokens';\nimport { catchError, map, of, throwError } from 'rxjs';\n\nimport { makeCacheKey } from './cache-key';\n\ntype ServerProps = Record<string, any>;\ntype ServerOutputs = Record<string, any>;\n\n/**\n * @description\n * Component that defines the bridge between the client and server-only\n * components. The component passes the component ID and props to the server\n * and retrieves the rendered HTML and outputs from the server-only component.\n *\n * Status: experimental\n */\n@Component({\n selector: 'server-only,ServerOnly,Server',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: ` <div [innerHTML]=\"content()\"></div> `,\n})\nexport class ServerOnly {\n component = input.required<string>();\n props = input<ServerProps>();\n outputs = output<ServerOutputs>();\n private http = inject(HttpClient);\n private sanitizer = inject(DomSanitizer);\n protected content = signal<SafeHtml>('');\n private route = inject(ActivatedRoute, { optional: true });\n private baseURL = injectBaseURL();\n private transferState = inject(TransferState);\n\n constructor() {\n effect(() => {\n const routeComponentId: string | undefined =\n this.route?.snapshot.data['component'];\n const props = this.props() || {};\n const componentId = routeComponentId || this.component();\n\n const headers = new HttpHeaders(\n new Headers({\n 'Content-type': 'application/json',\n 'X-Analog-Component': componentId,\n }),\n );\n\n const componentUrl = this.getComponentUrl(componentId);\n const httpRequest = new HttpRequest('POST', componentUrl, props, {\n headers,\n });\n const cacheKey = makeCacheKey(\n httpRequest,\n new URL(componentUrl).pathname,\n );\n const storeKey = makeStateKey<{ html: string; outputs: ServerOutputs }>(\n cacheKey,\n );\n const componentState = this.transferState.get<{\n html: string;\n outputs: ServerOutputs;\n } | null>(storeKey, null);\n\n if (componentState) {\n this.updateContent(componentState);\n this.transferState.remove(storeKey);\n } else {\n this.http\n .request(httpRequest)\n .pipe(\n map((response) => {\n if (response instanceof HttpResponse) {\n if (import.meta.env.SSR) {\n this.transferState.set(storeKey, response.body);\n }\n\n return response.body as {\n html: string;\n outputs: ServerOutputs;\n };\n }\n return throwError(\n () => ({}) as { html: string; outputs: ServerOutputs },\n );\n }),\n catchError((error: unknown) => {\n console.log(error);\n return of({\n html: '',\n outputs: {} as ServerOutputs,\n });\n }),\n )\n .subscribe((content) =>\n this.updateContent(\n content as { html: string; outputs: ServerOutputs },\n ),\n );\n }\n });\n }\n\n updateContent(content: { html: string; outputs: ServerOutputs }) {\n this.content.set(this.sanitizer.bypassSecurityTrustHtml(content.html));\n this.outputs.emit(content.outputs);\n }\n\n getComponentUrl(componentId: string) {\n let baseURL = this.baseURL;\n\n if (!baseURL && typeof window !== 'undefined') {\n baseURL = window.location.origin;\n }\n\n return `${baseURL}/_analog/components/${componentId}`;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["HTTP_ROOT_INTERCEPTOR_FNS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analogjs-router.mjs","sources":["../../../../packages/router/src/lib/meta-tags.ts","../../../../packages/router/src/lib/endpoints.ts","../../../../packages/router/src/lib/inject-route-endpoint-url.ts","../../../../packages/router/src/lib/route-config.ts","../../../../packages/router/src/lib/markdown-helpers.ts","../../../../packages/router/src/lib/constants.ts","../../../../packages/router/src/lib/routes.ts","../../../../packages/router/src/lib/define-route.ts","../../../../packages/router/src/lib/cookie-interceptor.ts","../../../../packages/router/src/lib/provide-file-router.ts","../../../../packages/router/src/lib/inject-load.ts","../../../../packages/router/src/lib/get-load-resolver.ts","../../../../packages/router/src/lib/cache-key.ts","../../../../packages/router/src/lib/request-context.ts","../../../../packages/router/src/lib/form-action.directive.ts","../../../../packages/router/src/lib/debug/routes.ts","../../../../packages/router/src/lib/debug/index.ts","../../../../packages/router/src/lib/server.component.ts","../../../../packages/router/src/analogjs-router.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport { Meta, MetaDefinition as NgMetaTag } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\nexport const ROUTE_META_TAGS_KEY = Symbol(\n '@analogjs/router Route Meta Tags Key',\n);\n\nconst CHARSET_KEY = 'charset';\nconst HTTP_EQUIV_KEY = 'httpEquiv';\n// httpEquiv selector key needs to be in kebab case format\nconst HTTP_EQUIV_SELECTOR_KEY = 'http-equiv';\nconst NAME_KEY = 'name';\nconst PROPERTY_KEY = 'property';\nconst CONTENT_KEY = 'content';\n\nexport type MetaTag =\n | (CharsetMetaTag & ExcludeRestMetaTagKeys<typeof CHARSET_KEY>)\n | (HttpEquivMetaTag & ExcludeRestMetaTagKeys<typeof HTTP_EQUIV_KEY>)\n | (NameMetaTag & ExcludeRestMetaTagKeys<typeof NAME_KEY>)\n | (PropertyMetaTag & ExcludeRestMetaTagKeys<typeof PROPERTY_KEY>);\n\ntype CharsetMetaTag = { [CHARSET_KEY]: string };\ntype HttpEquivMetaTag = { [HTTP_EQUIV_KEY]: string; [CONTENT_KEY]: string };\ntype NameMetaTag = { [NAME_KEY]: string; [CONTENT_KEY]: string };\ntype PropertyMetaTag = { [PROPERTY_KEY]: string; [CONTENT_KEY]: string };\n\ntype MetaTagKey =\n | typeof CHARSET_KEY\n | typeof HTTP_EQUIV_KEY\n | typeof NAME_KEY\n | typeof PROPERTY_KEY;\ntype ExcludeRestMetaTagKeys<Key extends MetaTagKey> = {\n [K in Exclude<MetaTagKey, Key>]?: never;\n};\n\ntype MetaTagSelector =\n | typeof CHARSET_KEY\n | `${\n | typeof HTTP_EQUIV_SELECTOR_KEY\n | typeof NAME_KEY\n | typeof PROPERTY_KEY}=\"${string}\"`;\ntype MetaTagMap = Record<MetaTagSelector, MetaTag>;\n\nexport function updateMetaTagsOnRouteChange(): void {\n const router = inject(Router);\n const metaService = inject(Meta);\n\n router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n const metaTagMap = getMetaTagMap(router.routerState.snapshot.root);\n\n for (const metaTagSelector in metaTagMap) {\n const metaTag = metaTagMap[\n metaTagSelector as MetaTagSelector\n ] as NgMetaTag;\n metaService.updateTag(metaTag, metaTagSelector);\n }\n });\n}\n\nfunction getMetaTagMap(route: ActivatedRouteSnapshot): MetaTagMap {\n const metaTagMap = {} as MetaTagMap;\n let currentRoute: ActivatedRouteSnapshot | null = route;\n\n while (currentRoute) {\n const metaTags: MetaTag[] = currentRoute.data[ROUTE_META_TAGS_KEY] ?? [];\n for (const metaTag of metaTags) {\n metaTagMap[getMetaTagSelector(metaTag)] = metaTag;\n }\n\n currentRoute = currentRoute.firstChild;\n }\n\n return metaTagMap;\n}\n\nfunction getMetaTagSelector(metaTag: MetaTag): MetaTagSelector {\n if (metaTag.name) {\n return `${NAME_KEY}=\"${metaTag.name}\"`;\n }\n\n if (metaTag.property) {\n return `${PROPERTY_KEY}=\"${metaTag.property}\"`;\n }\n\n if (metaTag.httpEquiv) {\n return `${HTTP_EQUIV_SELECTOR_KEY}=\"${metaTag.httpEquiv}\"`;\n }\n\n return CHARSET_KEY;\n}\n","export const ANALOG_META_KEY = Symbol(\n '@analogjs/router Analog Route Metadata Key',\n);\n\n/**\n * This variable reference is replaced with a glob of all route endpoints.\n */\nexport let ANALOG_PAGE_ENDPOINTS: any = {};\n","import type { ActivatedRouteSnapshot, Route } from '@angular/router';\nimport { injectBaseURL, injectAPIPrefix } from '@analogjs/router/tokens';\n\nimport { ANALOG_META_KEY } from './endpoints';\n\nexport function injectRouteEndpointURL(route: ActivatedRouteSnapshot) {\n const routeConfig = route.routeConfig as Route & {\n [ANALOG_META_KEY]: { endpoint: string; endpointKey: string };\n };\n\n const apiPrefix = injectAPIPrefix();\n const baseUrl = injectBaseURL();\n const { queryParams, fragment: hash, params, parent } = route;\n const segment = parent?.url.map((segment) => segment.path).join('/') || '';\n const url = new URL(\n '',\n import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] ||\n baseUrl ||\n (typeof window !== 'undefined' && window.location.origin\n ? window.location.origin\n : ''),\n );\n url.pathname = `${\n url.pathname.endsWith('/') ? url.pathname : url.pathname + '/'\n }${apiPrefix}/_analog${routeConfig[ANALOG_META_KEY].endpoint}`;\n url.search = `${new URLSearchParams(queryParams).toString()}`;\n url.hash = hash ?? '';\n\n Object.keys(params).forEach((param) => {\n url.pathname = url.pathname.replace(`[${param}]`, params[param]);\n });\n url.pathname = url.pathname.replace('**', segment);\n\n return url;\n}\n","import { inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport type { Route } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\nimport { RedirectRouteMeta, RouteConfig, RouteMeta } from './models';\nimport { ROUTE_META_TAGS_KEY } from './meta-tags';\nimport { ANALOG_PAGE_ENDPOINTS, ANALOG_META_KEY } from './endpoints';\nimport { injectRouteEndpointURL } from './inject-route-endpoint-url';\n\nexport function toRouteConfig(routeMeta: RouteMeta | undefined): RouteConfig {\n if (routeMeta && isRedirectRouteMeta(routeMeta)) {\n return routeMeta;\n }\n\n let { meta, ...routeConfig } = routeMeta ?? {};\n\n if (Array.isArray(meta)) {\n routeConfig.data = { ...routeConfig.data, [ROUTE_META_TAGS_KEY]: meta };\n } else if (typeof meta === 'function') {\n routeConfig.resolve = {\n ...routeConfig.resolve,\n [ROUTE_META_TAGS_KEY]: meta,\n };\n }\n\n if (!routeConfig) {\n routeConfig = {};\n }\n\n routeConfig.runGuardsAndResolvers =\n routeConfig.runGuardsAndResolvers ?? 'paramsOrQueryParamsChange';\n routeConfig.resolve = {\n ...routeConfig.resolve,\n load: async (route) => {\n const routeConfig = route.routeConfig as Route & {\n [ANALOG_META_KEY]: { endpoint: string; endpointKey: string };\n };\n\n if (ANALOG_PAGE_ENDPOINTS[routeConfig[ANALOG_META_KEY].endpointKey]) {\n const http = inject(HttpClient);\n const url = injectRouteEndpointURL(route);\n\n if (\n !!import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] &&\n (globalThis as any).$fetch\n ) {\n return (globalThis as any).$fetch(url.pathname);\n }\n\n return firstValueFrom(http.get(`${url.href}`));\n }\n\n return {};\n },\n };\n\n return routeConfig;\n}\n\nfunction isRedirectRouteMeta(\n routeMeta: RouteMeta,\n): routeMeta is RedirectRouteMeta {\n return !!routeMeta.redirectTo;\n}\n","import { inject } from '@angular/core';\nimport { RouteExport } from './models';\n\ndeclare const Zone: any;\n\n// The Zone is currently enabled by default, so we wouldn't need this check.\n// However, leaving this open space will be useful if zone.js becomes optional\n// in the future. This means we won't have to modify the current code, and it will\n// continue to work seamlessly.\nconst isNgZoneEnabled = typeof Zone !== 'undefined' && !!Zone.root;\n\nexport function toMarkdownModule(\n markdownFileFactory: () => Promise<string>,\n): () => Promise<RouteExport> {\n return async () => {\n const createLoader = () =>\n Promise.all([import('@analogjs/content'), markdownFileFactory()]);\n\n const [\n { parseRawContentFile, MarkdownRouteComponent, ContentRenderer },\n markdownFile,\n ]: [typeof import('@analogjs/content'), string] = await (isNgZoneEnabled\n ? // We are not able to use `runOutsideAngular` because we are not inside\n // an injection context to retrieve the `NgZone` instance.\n // The `Zone.root.run` is required when the code is running in the\n // browser since asynchronous tasks being scheduled in the current context\n // are a reason for unnecessary change detection cycles.\n Zone.root.run(createLoader)\n : createLoader());\n\n const { content, attributes } = parseRawContentFile(markdownFile);\n const { title, meta } = attributes;\n\n return {\n default: MarkdownRouteComponent,\n routeMeta: {\n data: { _analogContent: content },\n title,\n meta,\n resolve: {\n renderedAnalogContent: async () => {\n const contentRenderer = inject(ContentRenderer);\n return contentRenderer.render(content);\n },\n },\n },\n };\n };\n}\n","export const ENDPOINT_EXTENSION = '.server.ts';\nexport const APP_DIR = 'src/app';\n","import type { Route } from '@angular/router';\n\nimport type { RouteExport, RouteMeta } from './models';\nimport { toRouteConfig } from './route-config';\nimport { toMarkdownModule } from './markdown-helpers';\nimport { ENDPOINT_EXTENSION } from './constants';\nimport { ANALOG_META_KEY } from './endpoints';\n\n/**\n * This variable reference is replaced with a glob of all page routes.\n */\nexport let ANALOG_ROUTE_FILES = {};\n\n/**\n * This variable reference is replaced with a glob of all content routes.\n */\nexport let ANALOG_CONTENT_ROUTE_FILES = {};\n\nexport type Files = Record<string, () => Promise<RouteExport | string>>;\n\ntype RawRoute = {\n filename: string | null;\n rawSegment: string;\n ancestorRawSegments: string[];\n segment: string;\n level: number;\n children: RawRoute[];\n};\n\ntype RawRouteMap = Record<string, RawRoute>;\n\ntype RawRouteByLevelMap = Record<number, RawRouteMap>;\n\n/**\n * A function used to parse list of files and create configuration of routes.\n *\n * @param files\n * @returns Array of routes\n */\nexport function createRoutes(files: Files, debug = false): Route[] {\n const filenames = Object.keys(files);\n\n if (filenames.length === 0) {\n return [];\n }\n\n // map filenames to raw routes and group them by level\n const rawRoutesByLevelMap = filenames.reduce((acc, filename) => {\n const rawPath = toRawPath(filename);\n const rawSegments = rawPath.split('/');\n // nesting level starts at 0\n // rawPath: /products => level: 0\n // rawPath: /products/:id => level: 1\n const level = rawSegments.length - 1;\n const rawSegment = rawSegments[level];\n const ancestorRawSegments = rawSegments.slice(0, level);\n\n return {\n ...acc,\n [level]: {\n ...acc[level],\n [rawPath]: {\n filename,\n rawSegment,\n ancestorRawSegments,\n segment: toSegment(rawSegment),\n level,\n children: [],\n },\n },\n };\n }, {} as RawRouteByLevelMap);\n\n const allLevels = Object.keys(rawRoutesByLevelMap).map(Number);\n const maxLevel = Math.max(...allLevels);\n\n // add each raw route to its parent's children array\n for (let level = maxLevel; level > 0; level--) {\n const rawRoutesMap = rawRoutesByLevelMap[level];\n const rawPaths = Object.keys(rawRoutesMap);\n\n for (const rawPath of rawPaths) {\n const rawRoute = rawRoutesMap[rawPath];\n const parentRawPath = rawRoute.ancestorRawSegments.join('/');\n const parentRawSegmentIndex = rawRoute.ancestorRawSegments.length - 1;\n const parentRawSegment =\n rawRoute.ancestorRawSegments[parentRawSegmentIndex];\n\n // create the parent level and/or raw route if it does not exist\n // parent route won't exist for nested routes that don't have a layout route\n rawRoutesByLevelMap[level - 1] ||= {};\n rawRoutesByLevelMap[level - 1][parentRawPath] ||= {\n filename: null,\n rawSegment: parentRawSegment,\n ancestorRawSegments: rawRoute.ancestorRawSegments.slice(\n 0,\n parentRawSegmentIndex,\n ),\n segment: toSegment(parentRawSegment),\n level: level - 1,\n children: [],\n };\n\n rawRoutesByLevelMap[level - 1][parentRawPath].children.push(rawRoute);\n }\n }\n\n // only take raw routes from the root level\n // since they already contain nested routes as their children\n const rootRawRoutesMap = rawRoutesByLevelMap[0];\n const rawRoutes = Object.keys(rootRawRoutesMap).map(\n (segment) => rootRawRoutesMap[segment],\n );\n sortRawRoutes(rawRoutes);\n\n return toRoutes(rawRoutes, files, debug);\n}\n\nfunction toRawPath(filename: string): string {\n return filename\n .replace(\n // convert to relative path and remove file extension\n /^(?:[a-zA-Z]:[\\\\/])?(.*?)[\\\\/](?:routes|pages)[\\\\/]|(?:[\\\\/](?:app[\\\\/](?:routes|pages)[\\\\/]))|(\\.page\\.(js|ts|analog|ag)$)|(\\.(ts|md|analog|ag)$)/g,\n '',\n )\n .replace(/\\[\\.{3}.+\\]/, '**') // [...not-found] => **\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [id] => :id\n}\n\nfunction toSegment(rawSegment: string): string {\n return rawSegment\n .replace(/index|\\(.*?\\)/g, '') // replace named empty segments\n .replace(/\\.|\\/+/g, '/') // replace dots with slashes and remove redundant slashes\n .replace(/^\\/+|\\/+$/g, ''); // remove trailing slashes\n}\n\nfunction toRoutes(rawRoutes: RawRoute[], files: Files, debug = false): Route[] {\n const routes: Route[] = [];\n\n for (const rawRoute of rawRoutes) {\n const children: Route[] | undefined =\n rawRoute.children.length > 0\n ? toRoutes(rawRoute.children, files, debug)\n : undefined;\n let module: (() => Promise<RouteExport>) | undefined = undefined;\n let analogMeta: { endpoint: string; endpointKey: string } | undefined =\n undefined;\n\n if (rawRoute.filename) {\n const isMarkdownFile = rawRoute.filename.endsWith('.md');\n\n if (!debug) {\n module = isMarkdownFile\n ? toMarkdownModule(files[rawRoute.filename] as () => Promise<string>)\n : (files[rawRoute.filename] as () => Promise<RouteExport>);\n }\n\n const endpointKey = rawRoute.filename.replace(\n /\\.page\\.(ts|analog|ag)$/,\n ENDPOINT_EXTENSION,\n );\n\n // get endpoint path\n const rawEndpoint = rawRoute.filename\n .replace(/\\.page\\.(ts|analog|ag)$/, '')\n .replace(/\\[\\.{3}.+\\]/, '**') // [...not-found] => **\n .replace(/^(.*?)\\/pages/, '/pages');\n\n // replace periods, remove (index) paths\n const endpoint = (rawEndpoint || '')\n .replace(/\\./g, '/')\n .replace(/\\/\\((.*?)\\)$/, '/-$1-');\n\n analogMeta = {\n endpoint,\n endpointKey,\n };\n }\n\n type DebugRoute = Route & {\n filename?: string | null | undefined;\n isLayout?: boolean;\n };\n\n const route: Route & { meta?: typeof analogMeta } & DebugRoute = module\n ? {\n path: rawRoute.segment,\n loadChildren: () =>\n module!().then((m) => {\n if (import.meta.env.DEV) {\n const hasModuleDefault = !!m.default;\n const hasRedirect = !!m.routeMeta?.redirectTo;\n\n if (!hasModuleDefault && !hasRedirect) {\n console.warn(\n `[Analog] Missing default export at ${rawRoute.filename}`,\n );\n }\n }\n\n return [\n {\n path: '',\n component: m.default,\n ...toRouteConfig(m.routeMeta as RouteMeta | undefined),\n children,\n [ANALOG_META_KEY]: analogMeta,\n },\n ];\n }),\n }\n : {\n path: rawRoute.segment,\n ...(debug\n ? {\n filename: rawRoute.filename ? rawRoute.filename : undefined,\n isLayout: children && children.length > 0 ? true : false,\n }\n : {}),\n children,\n };\n\n routes.push(route);\n }\n\n return routes;\n}\n\nfunction sortRawRoutes(rawRoutes: RawRoute[]): void {\n rawRoutes.sort((a, b) => {\n let segmentA = deprioritizeSegment(a.segment);\n let segmentB = deprioritizeSegment(b.segment);\n\n // prioritize routes with fewer children\n if (a.children.length > b.children.length) {\n segmentA = `~${segmentA}`;\n } else if (a.children.length < b.children.length) {\n segmentB = `~${segmentB}`;\n }\n\n return segmentA > segmentB ? 1 : -1;\n });\n\n for (const rawRoute of rawRoutes) {\n sortRawRoutes(rawRoute.children);\n }\n}\n\nfunction deprioritizeSegment(segment: string): string {\n // deprioritize param and wildcard segments\n return segment.replace(':', '~~').replace('**', '~~~~');\n}\n\nexport const routes: Route[] = createRoutes({\n ...ANALOG_ROUTE_FILES,\n ...ANALOG_CONTENT_ROUTE_FILES,\n});\n","import { inject } from '@angular/core';\nimport { Route as NgRoute, Router } from '@angular/router';\nimport { ActivatedRoute } from '@angular/router';\n\ntype RouteOmitted =\n | 'component'\n | 'loadComponent'\n | 'loadChildren'\n | 'path'\n | 'pathMatch';\n\ntype RestrictedRoute = Omit<NgRoute, RouteOmitted>;\n\n/**\n * @deprecated Use `RouteMeta` type instead.\n * For more info see: https://github.com/analogjs/analog/issues/223\n *\n * Defines additional route config metadata. This\n * object is merged into the route config with\n * the predefined file-based route.\n *\n * @usageNotes\n *\n * ```\n * import { Component } from '@angular/core';\n * import { defineRouteMeta } from '@analogjs/router';\n *\n * export const routeMeta = defineRouteMeta({\n * title: 'Welcome'\n * });\n *\n * @Component({\n * template: `Home`,\n * standalone: true,\n * })\n * export default class HomeComponent {}\n * ```\n *\n * @param route\n * @returns\n */\nexport const defineRouteMeta = (route: RestrictedRoute) => {\n return route;\n};\n\n/**\n * Returns the instance of Angular Router\n *\n * @returns The router\n */\nexport const injectRouter = () => {\n return inject(Router);\n};\n\n/**\n * Returns the instance of the Activate Route for the component\n *\n * @returns The activated route\n */\nexport const injectActivatedRoute = () => {\n return inject(ActivatedRoute);\n};\n","import { isPlatformServer } from '@angular/common';\nimport { HttpHandlerFn, HttpHeaders, HttpRequest } from '@angular/common/http';\nimport { PLATFORM_ID, inject } from '@angular/core';\nimport { injectRequest } from '@analogjs/router/tokens';\n\nexport function cookieInterceptor(\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n location = inject(PLATFORM_ID),\n serverRequest = injectRequest(),\n) {\n if (isPlatformServer(location) && req.url.includes('/_analog/')) {\n let headers = new HttpHeaders();\n const cookies = serverRequest?.headers.cookie;\n headers = headers.set('cookie', cookies ?? '');\n\n const cookiedRequest = req.clone({\n headers,\n });\n\n return next(cookiedRequest);\n } else {\n return next(req);\n }\n}\n","import {\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport { provideRouter, RouterFeatures, ROUTES, Routes } from '@angular/router';\nimport { API_PREFIX } from '@analogjs/router/tokens';\nimport { ɵHTTP_ROOT_INTERCEPTOR_FNS as HTTP_ROOT_INTERCEPTOR_FNS } from '@angular/common/http';\n\nimport { routes } from './routes';\nimport { updateMetaTagsOnRouteChange } from './meta-tags';\nimport { cookieInterceptor } from './cookie-interceptor';\n\ndeclare const ANALOG_API_PREFIX: string;\n\n/**\n * Sets up providers for the Angular router, and registers\n * file-based routes. Additional features can be provided\n * to further configure the behavior of the router.\n *\n * @param features\n * @returns Providers and features to configure the router with routes\n */\nexport function provideFileRouter(\n ...features: RouterFeatures[]\n): EnvironmentProviders {\n const extraRoutesFeature = features.filter((feat) => feat.ɵkind >= 100);\n const routerFeatures = features.filter((feat) => feat.ɵkind < 100);\n\n return makeEnvironmentProviders([\n extraRoutesFeature.map((erf) => erf.ɵproviders),\n provideRouter(routes, ...routerFeatures),\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => updateMetaTagsOnRouteChange(),\n },\n {\n provide: HTTP_ROOT_INTERCEPTOR_FNS,\n multi: true,\n useValue: cookieInterceptor,\n },\n {\n provide: API_PREFIX,\n useFactory() {\n return typeof ANALOG_API_PREFIX !== 'undefined'\n ? ANALOG_API_PREFIX\n : 'api';\n },\n },\n ]);\n}\n\n/**\n * Provides extra custom routes in addition to the routes\n * discovered from the filesystem-based routing. These routes are\n * inserted before the filesystem-based routes, and take priority in\n * route matching.\n */\nexport function withExtraRoutes(routes: Routes): RouterFeatures {\n return {\n ɵkind: 100 as number,\n ɵproviders: [{ provide: ROUTES, useValue: routes, multi: true }],\n };\n}\n","import { Injector, inject } from '@angular/core';\nimport { ActivatedRoute, Data } from '@angular/router';\nimport { Observable, map } from 'rxjs';\n\nimport { PageServerLoad } from './route-types';\n\nexport function injectLoad<\n T extends (pageServerLoad: PageServerLoad) => Promise<any>,\n>(options?: { injector?: Injector }): Observable<Awaited<ReturnType<T>>> {\n const injector = options?.injector ?? inject(Injector);\n const route = injector.get(ActivatedRoute);\n\n return route.data.pipe(\n map<Data, Awaited<ReturnType<T>>>((data) => data['load']),\n );\n}\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\n/**\n * Get server load resolver data for the route\n *\n * @param route Provides the route to get server load resolver\n * @returns Returns server load resolver data for the route\n */\nexport async function getLoadResolver<T>(\n route: ActivatedRouteSnapshot,\n): Promise<T> {\n return route.routeConfig?.resolve?.['load']?.(route);\n}\n","import { HttpParams, HttpRequest } from '@angular/common/http';\nimport { StateKey, makeStateKey } from '@angular/core';\n\nfunction sortAndConcatParams(params: HttpParams | URLSearchParams): string {\n return [...params.keys()]\n .sort()\n .map((k) => `${k}=${params.getAll(k)}`)\n .join('&');\n}\n\nexport function makeCacheKey(\n request: HttpRequest<any>,\n mappedRequestUrl: string,\n): StateKey<unknown> {\n // make the params encoded same as a url so it's easy to identify\n const { params, method, responseType } = request;\n const encodedParams = sortAndConcatParams(params);\n\n let serializedBody = request.serializeBody();\n if (serializedBody instanceof URLSearchParams) {\n serializedBody = sortAndConcatParams(serializedBody);\n } else if (typeof serializedBody !== 'string') {\n serializedBody = '';\n }\n\n const key = [\n method,\n responseType,\n mappedRequestUrl,\n serializedBody,\n encodedParams,\n ].join('|');\n\n const hash = generateHash(key);\n\n return makeStateKey(hash);\n}\n\nfunction generateHash(str: string) {\n let hash = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n let chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return `${hash}`;\n}\n","import { TransferState, inject, makeStateKey } from '@angular/core';\nimport {\n HttpHandlerFn,\n HttpHeaders,\n HttpRequest,\n HttpResponse,\n} from '@angular/common/http';\n\nimport { from, of } from 'rxjs';\n\nimport { injectBaseURL, injectAPIPrefix } from '@analogjs/router/tokens';\n\nimport { makeCacheKey } from './cache-key';\n\n/**\n * Interceptor that is server-aware when making HttpClient requests.\n * Server-side requests use the full URL\n * Prerendering uses the internal Nitro $fetch function, along with state transfer\n * Client-side requests use the window.location.origin\n *\n * @param req HttpRequest<unknown>\n * @param next HttpHandlerFn\n * @returns\n */\nexport function requestContextInterceptor(\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n) {\n const apiPrefix = injectAPIPrefix();\n const baseUrl = injectBaseURL();\n const transferState = inject(TransferState);\n\n // during prerendering with Nitro\n if (\n typeof global !== 'undefined' &&\n global.$fetch &&\n baseUrl &&\n (req.url.startsWith('/') ||\n req.url.startsWith(baseUrl) ||\n req.url.startsWith(`/${apiPrefix}`))\n ) {\n const requestUrl = new URL(req.url, baseUrl);\n const cacheKey = makeCacheKey(req, new URL(requestUrl).pathname);\n const storeKey = makeStateKey<unknown>(`analog_${cacheKey}`);\n const fetchUrl = requestUrl.pathname;\n\n const responseType =\n req.responseType === 'arraybuffer' ? 'arrayBuffer' : req.responseType;\n\n return from(\n global.$fetch\n .raw(fetchUrl, {\n method: req.method as any,\n body: req.body ? req.body : undefined,\n params: requestUrl.searchParams,\n responseType,\n headers: req.headers.keys().reduce((hdrs, current) => {\n return {\n ...hdrs,\n [current]: req.headers.get(current),\n };\n }, {}),\n })\n .then((res) => {\n const cacheResponse = {\n body: res._data,\n headers: new HttpHeaders(res.headers),\n status: 200,\n statusText: 'OK',\n url: fetchUrl,\n };\n const transferResponse = new HttpResponse(cacheResponse);\n\n transferState.set(storeKey, cacheResponse);\n return transferResponse;\n }),\n );\n }\n\n // on the client\n if (\n !import.meta.env.SSR &&\n (req.url.startsWith('/') || req.url.includes('/_analog/'))\n ) {\n // /_analog/ requests are full URLs\n const requestUrl = req.url.includes('/_analog/')\n ? req.url\n : `${window.location.origin}${req.url}`;\n const cacheKey = makeCacheKey(req, new URL(requestUrl).pathname);\n const storeKey = makeStateKey<unknown>(`analog_${cacheKey}`);\n const cacheRestoreResponse = transferState.get(storeKey, null);\n\n if (cacheRestoreResponse) {\n transferState.remove(storeKey);\n return of(new HttpResponse(cacheRestoreResponse));\n }\n\n return next(\n req.clone({\n url: requestUrl,\n }),\n );\n }\n\n // on the server\n if (baseUrl && (req.url.startsWith('/') || req.url.startsWith(baseUrl))) {\n const requestUrl =\n req.url.startsWith(baseUrl) && !req.url.startsWith('/')\n ? req.url\n : `${baseUrl}${req.url}`;\n\n return next(\n req.clone({\n url: requestUrl,\n }),\n );\n }\n\n return next(req);\n}\n","import { Directive, inject, input, output } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\n\nimport { injectRouteEndpointURL } from './inject-route-endpoint-url';\n\n@Directive({\n selector: 'form[action],form[method]',\n host: {\n '(submit)': `submitted($event)`,\n },\n standalone: true,\n})\nexport class FormAction {\n action = input<string>('');\n onSuccess = output<unknown>();\n onError = output<unknown>();\n state = output<\n 'submitting' | 'error' | 'redirect' | 'success' | 'navigate'\n >();\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private path = this._getPath();\n\n submitted($event: { target: HTMLFormElement } & Event) {\n $event.preventDefault();\n\n this.state.emit('submitting');\n const body = new FormData($event.target);\n\n if ($event.target.method.toUpperCase() === 'GET') {\n this._handleGet(body, this.router.url);\n } else {\n this._handlePost(body, this.path, $event);\n }\n }\n\n private _handleGet(body: FormData, path: string) {\n const params: Params = {};\n body.forEach((formVal, formKey) => (params[formKey] = formVal));\n\n this.state.emit('navigate');\n const url = path.split('?')[0];\n this.router.navigate([url], {\n queryParams: params,\n onSameUrlNavigation: 'reload',\n });\n }\n\n private _handlePost(\n body: FormData,\n path: string,\n $event: { target: HTMLFormElement } & Event,\n ) {\n fetch(path, {\n method: $event.target.method,\n body,\n })\n .then((res) => {\n if (res.ok) {\n if (res.redirected) {\n const redirectUrl = new URL(res.url).pathname;\n this.state.emit('redirect');\n this.router.navigate([redirectUrl]);\n } else if (this._isJSON(res.headers.get('Content-type'))) {\n res.json().then((result) => {\n this.onSuccess.emit(result);\n this.state.emit('success');\n });\n } else {\n res.text().then((result) => {\n this.onSuccess.emit(result);\n this.state.emit('success');\n });\n }\n } else {\n if (res.headers.get('X-Analog-Errors')) {\n res.json().then((errors: unknown) => {\n this.onError.emit(errors);\n this.state.emit('error');\n });\n } else {\n this.state.emit('error');\n }\n }\n })\n .catch((_) => {\n this.state.emit('error');\n });\n }\n\n private _getPath() {\n if (this.route) {\n return injectRouteEndpointURL(this.route.snapshot).pathname;\n }\n\n return `/api/_analog/pages${window.location.pathname}`;\n }\n\n private _isJSON(contentType: string | null): boolean {\n const mime = contentType ? contentType.split(';') : [];\n const essence = mime[0];\n\n return essence === 'application/json';\n }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { Route } from '@angular/router';\n\nimport {\n ANALOG_CONTENT_ROUTE_FILES,\n ANALOG_ROUTE_FILES,\n createRoutes,\n} from '../routes';\n\nexport const DEBUG_ROUTES = new InjectionToken(\n '@analogjs/router debug routes',\n {\n providedIn: 'root',\n factory() {\n const debugRoutes = createRoutes(\n {\n ...ANALOG_ROUTE_FILES,\n ...ANALOG_CONTENT_ROUTE_FILES,\n },\n true,\n );\n\n return debugRoutes as (Route & DebugRoute)[];\n },\n },\n);\n\nexport type DebugRoute = {\n path: string;\n filename: string;\n isLayout: boolean;\n children?: DebugRoute[];\n};\n\nexport function injectDebugRoutes() {\n return inject(DEBUG_ROUTES);\n}\n","import { ROUTES } from '@angular/router';\n\n/**\n * Provides routes that provide additional\n * pages for displaying and debugging\n * routes.\n */\nexport function withDebugRoutes() {\n const routes = [\n {\n path: '__analog/routes',\n loadComponent: () => import('./debug.page'),\n },\n ];\n\n return {\n ɵkind: 101 as number,\n ɵproviders: [{ provide: ROUTES, useValue: routes, multi: true }],\n };\n}\n","import {\n HttpClient,\n HttpHeaders,\n HttpRequest,\n HttpResponse,\n} from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n makeStateKey,\n output,\n signal,\n TransferState,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { injectBaseURL } from '@analogjs/router/tokens';\nimport { catchError, map, of, throwError } from 'rxjs';\n\nimport { makeCacheKey } from './cache-key';\n\ntype ServerProps = Record<string, any>;\ntype ServerOutputs = Record<string, any>;\n\n/**\n * @description\n * Component that defines the bridge between the client and server-only\n * components. The component passes the component ID and props to the server\n * and retrieves the rendered HTML and outputs from the server-only component.\n *\n * Status: experimental\n */\n@Component({\n selector: 'server-only,ServerOnly,Server',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: ` <div [innerHTML]=\"content()\"></div> `,\n})\nexport class ServerOnly {\n component = input.required<string>();\n props = input<ServerProps>();\n outputs = output<ServerOutputs>();\n private http = inject(HttpClient);\n private sanitizer = inject(DomSanitizer);\n protected content = signal<SafeHtml>('');\n private route = inject(ActivatedRoute, { optional: true });\n private baseURL = injectBaseURL();\n private transferState = inject(TransferState);\n\n constructor() {\n effect(() => {\n const routeComponentId: string | undefined =\n this.route?.snapshot.data['component'];\n const props = this.props() || {};\n const componentId = routeComponentId || this.component();\n\n const headers = new HttpHeaders(\n new Headers({\n 'Content-type': 'application/json',\n 'X-Analog-Component': componentId,\n }),\n );\n\n const componentUrl = this.getComponentUrl(componentId);\n const httpRequest = new HttpRequest('POST', componentUrl, props, {\n headers,\n });\n const cacheKey = makeCacheKey(\n httpRequest,\n new URL(componentUrl).pathname,\n );\n const storeKey = makeStateKey<{ html: string; outputs: ServerOutputs }>(\n cacheKey,\n );\n const componentState = this.transferState.get<{\n html: string;\n outputs: ServerOutputs;\n } | null>(storeKey, null);\n\n if (componentState) {\n this.updateContent(componentState);\n this.transferState.remove(storeKey);\n } else {\n this.http\n .request(httpRequest)\n .pipe(\n map((response) => {\n if (response instanceof HttpResponse) {\n if (import.meta.env.SSR) {\n this.transferState.set(storeKey, response.body);\n }\n\n return response.body as {\n html: string;\n outputs: ServerOutputs;\n };\n }\n return throwError(\n () => ({}) as { html: string; outputs: ServerOutputs },\n );\n }),\n catchError((error: unknown) => {\n console.log(error);\n return of({\n html: '',\n outputs: {} as ServerOutputs,\n });\n }),\n )\n .subscribe((content) =>\n this.updateContent(\n content as { html: string; outputs: ServerOutputs },\n ),\n );\n }\n });\n }\n\n updateContent(content: { html: string; outputs: ServerOutputs }) {\n this.content.set(this.sanitizer.bypassSecurityTrustHtml(content.html));\n this.outputs.emit(content.outputs);\n }\n\n getComponentUrl(componentId: string) {\n let baseURL = this.baseURL;\n\n if (!baseURL && typeof window !== 'undefined') {\n baseURL = window.location.origin;\n }\n\n return `${baseURL}/_analog/components/${componentId}`;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["HTTP_ROOT_INTERCEPTOR_FNS"],"mappings":"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"}
|