@analogjs/router 3.0.0-alpha.2 → 3.0.0-alpha.21

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.
Files changed (90) hide show
  1. package/content/package.json +4 -0
  2. package/fesm2022/analogjs-router-content.mjs +63 -0
  3. package/fesm2022/analogjs-router-content.mjs.map +1 -0
  4. package/fesm2022/analogjs-router-server-actions.mjs +327 -31
  5. package/fesm2022/analogjs-router-server-actions.mjs.map +1 -1
  6. package/fesm2022/analogjs-router-server.mjs +151 -199
  7. package/fesm2022/analogjs-router-server.mjs.map +1 -1
  8. package/fesm2022/analogjs-router-tanstack-query-server.mjs +22 -0
  9. package/fesm2022/analogjs-router-tanstack-query-server.mjs.map +1 -0
  10. package/fesm2022/analogjs-router-tanstack-query.mjs +39 -0
  11. package/fesm2022/analogjs-router-tanstack-query.mjs.map +1 -0
  12. package/fesm2022/analogjs-router-tokens.mjs +15 -18
  13. package/fesm2022/analogjs-router-tokens.mjs.map +1 -1
  14. package/fesm2022/analogjs-router.mjs +960 -815
  15. package/fesm2022/analogjs-router.mjs.map +1 -1
  16. package/fesm2022/debug.page.mjs +135 -0
  17. package/fesm2022/debug.page.mjs.map +1 -0
  18. package/fesm2022/provide-analog-query.mjs +23 -0
  19. package/fesm2022/provide-analog-query.mjs.map +1 -0
  20. package/fesm2022/route-files.mjs +345 -0
  21. package/fesm2022/route-files.mjs.map +1 -0
  22. package/fesm2022/routes.mjs +28 -0
  23. package/fesm2022/routes.mjs.map +1 -0
  24. package/package.json +67 -27
  25. package/server/actions/package.json +4 -0
  26. package/server/package.json +4 -0
  27. package/tanstack-query/package.json +4 -0
  28. package/tanstack-query/server/package.json +4 -0
  29. package/tokens/package.json +4 -0
  30. package/types/content/src/index.d.ts +4 -0
  31. package/types/content/src/lib/debug/routes.d.ts +10 -0
  32. package/types/content/src/lib/markdown-helpers.d.ts +2 -0
  33. package/types/content/src/lib/routes.d.ts +8 -0
  34. package/types/content/src/lib/with-content-routes.d.ts +2 -0
  35. package/types/server/actions/src/actions.d.ts +13 -0
  36. package/types/server/actions/src/define-action.d.ts +54 -0
  37. package/types/server/actions/src/define-api-route.d.ts +57 -0
  38. package/types/server/actions/src/define-page-load.d.ts +55 -0
  39. package/types/server/actions/src/define-server-route.d.ts +68 -0
  40. package/types/server/actions/src/index.d.ts +9 -0
  41. package/types/server/actions/src/parse-request-data.d.ts +9 -0
  42. package/types/server/actions/src/validate.d.ts +8 -0
  43. package/types/server/src/index.d.ts +4 -0
  44. package/types/server/src/provide-server-context.d.ts +11 -0
  45. package/types/server/src/render.d.ts +12 -0
  46. package/types/server/src/server-component-render.d.ts +4 -0
  47. package/types/server/src/tokens.d.ts +7 -0
  48. package/types/src/index.d.ts +27 -0
  49. package/types/src/lib/cache-key.d.ts +3 -0
  50. package/types/src/lib/constants.d.ts +2 -0
  51. package/types/src/lib/cookie-interceptor.d.ts +4 -0
  52. package/types/src/lib/debug/debug.page.d.ts +20 -0
  53. package/types/src/lib/debug/index.d.ts +10 -0
  54. package/types/src/lib/debug/routes.d.ts +10 -0
  55. package/types/src/lib/define-route.d.ts +51 -0
  56. package/types/src/lib/endpoints.d.ts +5 -0
  57. package/types/src/lib/experimental.d.ts +140 -0
  58. package/types/src/lib/form-action.directive.d.ts +25 -0
  59. package/types/src/lib/get-load-resolver.d.ts +8 -0
  60. package/types/src/lib/inject-load.d.ts +9 -0
  61. package/types/src/lib/inject-navigate.d.ts +23 -0
  62. package/types/src/lib/inject-route-context.d.ts +32 -0
  63. package/types/src/lib/inject-route-endpoint-url.d.ts +2 -0
  64. package/types/src/lib/inject-typed-params.d.ts +63 -0
  65. package/types/src/lib/json-ld.d.ts +31 -0
  66. package/types/src/lib/meta-tags.d.ts +33 -0
  67. package/types/src/lib/models.d.ts +32 -0
  68. package/types/src/lib/provide-file-router-base.d.ts +4 -0
  69. package/types/src/lib/provide-file-router.d.ts +12 -0
  70. package/types/src/lib/request-context.d.ts +13 -0
  71. package/types/src/lib/route-builder.d.ts +5 -0
  72. package/types/src/lib/route-config.d.ts +2 -0
  73. package/types/src/lib/route-files.d.ts +18 -0
  74. package/types/src/lib/route-path.d.ts +124 -0
  75. package/types/src/lib/route-types.d.ts +12 -0
  76. package/types/src/lib/routes.d.ts +11 -0
  77. package/types/src/lib/server.component.d.ts +33 -0
  78. package/types/src/lib/validation-errors.d.ts +7 -0
  79. package/types/tanstack-query/server/src/index.d.ts +1 -0
  80. package/types/tanstack-query/src/index.d.ts +2 -0
  81. package/types/tanstack-query/src/provide-analog-query.d.ts +4 -0
  82. package/types/tanstack-query/src/provide-server-analog-query.d.ts +2 -0
  83. package/types/tanstack-query/src/server-query.d.ts +16 -0
  84. package/types/tokens/src/index.d.ts +23 -0
  85. package/fesm2022/analogjs-router-debug.page-jzggTA45.mjs +0 -91
  86. package/fesm2022/analogjs-router-debug.page-jzggTA45.mjs.map +0 -1
  87. package/types/analogjs-router-server-actions.d.ts +0 -17
  88. package/types/analogjs-router-server.d.ts +0 -29
  89. package/types/analogjs-router-tokens.d.ts +0 -27
  90. package/types/analogjs-router.d.ts +0 -269
@@ -1,226 +1,178 @@
1
- import { ɵresetCompiledComponents as _resetCompiledComponents, InjectionToken, assertInInjectionContext, inject, TransferState, makeStateKey, reflectComponentType, APP_ID, ɵConsole as _Console, enableProdMode } from '@angular/core';
2
- import { ɵSERVER_CONTEXT as _SERVER_CONTEXT, provideServerRendering, renderApplication } from '@angular/platform-server';
3
- import { REQUEST, RESPONSE, BASE_URL, INTERNAL_FETCH } from '@analogjs/router/tokens';
4
- import { bootstrapApplication } from '@angular/platform-browser';
5
- import { json } from 'node:stream/consumers';
6
-
1
+ import { APP_ID, InjectionToken, TransferState, assertInInjectionContext, enableProdMode, inject, makeStateKey, reflectComponentType, ɵConsole } from "@angular/core";
2
+ import { BASE_URL, INTERNAL_FETCH, REQUEST, RESPONSE } from "@analogjs/router/tokens";
3
+ import { bootstrapApplication } from "@angular/platform-browser";
4
+ import { provideServerRendering, renderApplication, ɵSERVER_CONTEXT } from "@angular/platform-server";
5
+ import { json } from "node:stream/consumers";
6
+ //#region packages/router/server/src/provide-server-context.ts
7
7
  function getHeaderValue(value) {
8
- return Array.isArray(value) ? value[0] : value;
8
+ return Array.isArray(value) ? value[0] : value;
9
9
  }
10
10
  function getRequestHeader(req, name) {
11
- const headers = req.headers;
12
- if (!headers) {
13
- return undefined;
14
- }
15
- if (typeof headers === 'object' &&
16
- headers !== null &&
17
- 'get' in headers &&
18
- typeof headers.get === 'function') {
19
- return headers.get(name) ?? undefined;
20
- }
21
- return getHeaderValue(headers[name]);
11
+ const headers = req.headers;
12
+ if (!headers) return;
13
+ if (typeof headers === "object" && headers !== null && "get" in headers && typeof headers.get === "function") return headers.get(name) ?? void 0;
14
+ return getHeaderValue(headers[name]);
22
15
  }
23
- function provideServerContext({ req, res, fetch, }) {
24
- const baseUrl = getBaseUrl(req);
25
- if (import.meta.env.DEV) {
26
- _resetCompiledComponents();
27
- }
28
- return [
29
- { provide: _SERVER_CONTEXT, useValue: 'ssr-analog' },
30
- { provide: REQUEST, useValue: req },
31
- { provide: RESPONSE, useValue: res },
32
- { provide: BASE_URL, useValue: baseUrl },
33
- { provide: INTERNAL_FETCH, useValue: fetch },
34
- ];
16
+ function provideServerContext({ req, res, fetch }) {
17
+ const baseUrl = getBaseUrl(req);
18
+ return [
19
+ {
20
+ provide: ɵSERVER_CONTEXT,
21
+ useValue: "ssr-analog"
22
+ },
23
+ {
24
+ provide: REQUEST,
25
+ useValue: req
26
+ },
27
+ {
28
+ provide: RESPONSE,
29
+ useValue: res
30
+ },
31
+ {
32
+ provide: BASE_URL,
33
+ useValue: baseUrl
34
+ },
35
+ {
36
+ provide: INTERNAL_FETCH,
37
+ useValue: fetch
38
+ }
39
+ ];
35
40
  }
36
41
  function getBaseUrl(req) {
37
- const protocol = getRequestProtocol(req);
38
- const host = getRequestHeader(req, 'x-forwarded-host') ??
39
- getRequestHeader(req, 'host') ??
40
- 'localhost';
41
- const originalUrl = req.originalUrl || req.url || '/';
42
- const parsedUrl = new URL('', `${protocol}://${host}${originalUrl.endsWith('/')
43
- ? originalUrl.substring(0, originalUrl.length - 1)
44
- : originalUrl}`);
45
- const baseUrl = parsedUrl.origin;
46
- return baseUrl;
42
+ const protocol = getRequestProtocol(req);
43
+ const host = getRequestHeader(req, "x-forwarded-host") ?? getRequestHeader(req, "host") ?? "localhost";
44
+ const originalUrl = req.originalUrl || req.url || "/";
45
+ return new URL("", `${protocol}://${host}${originalUrl.endsWith("/") ? originalUrl.substring(0, originalUrl.length - 1) : originalUrl}`).origin;
47
46
  }
48
47
  function getRequestProtocol(req, opts = {}) {
49
- const forwardedProto = getRequestHeader(req, 'x-forwarded-proto')
50
- ?.split(',')[0]
51
- ?.trim();
52
- if (opts.xForwardedProto !== false && forwardedProto === 'https') {
53
- return 'https';
54
- }
55
- return req.connection?.encrypted ? 'https' : 'http';
48
+ const forwardedProto = getRequestHeader(req, "x-forwarded-proto")?.split(",")[0]?.trim();
49
+ if (opts.xForwardedProto !== false && forwardedProto === "https") return "https";
50
+ return req.connection?.encrypted ? "https" : "http";
56
51
  }
57
-
58
- const STATIC_PROPS = new InjectionToken('Static Props');
52
+ //#endregion
53
+ //#region packages/router/server/src/tokens.ts
54
+ var STATIC_PROPS = new InjectionToken("Static Props");
59
55
  function provideStaticProps(props) {
60
- return {
61
- provide: STATIC_PROPS,
62
- useFactory() {
63
- return props;
64
- },
65
- };
56
+ return {
57
+ provide: STATIC_PROPS,
58
+ useFactory() {
59
+ return props;
60
+ }
61
+ };
66
62
  }
67
63
  function injectStaticProps() {
68
- assertInInjectionContext(injectStaticProps);
69
- return inject(STATIC_PROPS);
64
+ assertInInjectionContext(injectStaticProps);
65
+ return inject(STATIC_PROPS);
70
66
  }
71
67
  function injectStaticOutputs() {
72
- const transferState = inject(TransferState);
73
- const outputsKey = makeStateKey('_analog_output');
74
- return {
75
- set(data) {
76
- transferState.set(outputsKey, data);
77
- },
78
- };
68
+ const transferState = inject(TransferState);
69
+ const outputsKey = makeStateKey("_analog_output");
70
+ return { set(data) {
71
+ transferState.set(outputsKey, data);
72
+ } };
79
73
  }
80
-
74
+ //#endregion
75
+ //#region packages/router/server/src/server-component-render.ts
81
76
  function serverComponentRequest(serverContext) {
82
- // `ServerContext` is still backed by raw Node req/res, so read the header
83
- // directly instead of reconstructing an H3Event just for lookup.
84
- // In h3 v2 / Nitro v3, req may be undefined during fetch-based prerendering
85
- // (where event.node is not populated), so guard with optional chaining.
86
- const serverComponentId = serverContext.req?.headers?.['x-analog-component'];
87
- if (!serverComponentId &&
88
- serverContext.req?.url &&
89
- serverContext.req.url.startsWith('/_analog/components')) {
90
- const componentId = serverContext.req.url.split('/')?.[3];
91
- return componentId;
92
- }
93
- return serverComponentId;
77
+ const serverComponentId = serverContext.req?.headers?.["x-analog-component"];
78
+ if (!serverComponentId && serverContext.req?.url && serverContext.req.url.startsWith("/_analog/components")) return serverContext.req.url.split("/")?.[3];
79
+ return serverComponentId;
94
80
  }
95
- const components = import.meta.glob([
96
- '/src/server/components/**/*.{ts,analog,ag}',
97
- ]);
81
+ var components = /* @__PURE__ */ Object.assign({});
98
82
  async function renderServerComponent(url, serverContext, config) {
99
- const componentReqId = serverComponentRequest(serverContext);
100
- const { componentLoader, componentId } = getComponentLoader(componentReqId);
101
- if (!componentLoader) {
102
- return new Response(`Server Component Not Found ${componentId}`, {
103
- status: 404,
104
- });
105
- }
106
- const component = (await componentLoader())['default'];
107
- if (!component) {
108
- return new Response(`No default export for ${componentId}`, {
109
- status: 422,
110
- });
111
- }
112
- const mirror = reflectComponentType(component);
113
- const selector = mirror?.selector.split(',')?.[0] || 'server-component';
114
- // Server component requests POST JSON props from the client bridge, so parse
115
- // the Node request body directly instead of rebuilding an H3Event wrapper.
116
- const body = (await json(serverContext.req).catch(() => ({}))) || {};
117
- const appId = `analog-server-${selector.toLowerCase()}-${new Date().getTime()}`;
118
- const bootstrap = (context) => bootstrapApplication(component, {
119
- providers: [
120
- provideServerRendering(),
121
- provideStaticProps(body),
122
- { provide: _SERVER_CONTEXT, useValue: 'analog-server-component' },
123
- {
124
- provide: APP_ID,
125
- useFactory() {
126
- return appId;
127
- },
128
- },
129
- ...(config?.providers || []),
130
- ],
131
- }, context);
132
- const html = await renderApplication(bootstrap, {
133
- url,
134
- document: `<${selector}></${selector}>`,
135
- platformProviders: [
136
- {
137
- provide: _Console,
138
- useFactory() {
139
- return {
140
- warn: () => { },
141
- log: () => { },
142
- };
143
- },
144
- },
145
- ],
146
- });
147
- const outputs = retrieveTransferredState(html, appId);
148
- const responseData = {
149
- html,
150
- outputs,
151
- };
152
- return new Response(JSON.stringify(responseData), {
153
- headers: {
154
- 'X-Analog-Component': 'true',
155
- },
156
- });
83
+ const { componentLoader, componentId } = getComponentLoader(serverComponentRequest(serverContext));
84
+ if (!componentLoader) return new Response(`Server Component Not Found ${componentId}`, { status: 404 });
85
+ const component = (await componentLoader()).default;
86
+ if (!component) return new Response(`No default export for ${componentId}`, { status: 422 });
87
+ const selector = reflectComponentType(component)?.selector.split(",")?.[0] || "server-component";
88
+ const body = await json(serverContext.req).catch(() => ({})) || {};
89
+ const appId = `analog-server-${selector.toLowerCase()}-${(/* @__PURE__ */ new Date()).getTime()}`;
90
+ const bootstrap = (context) => bootstrapApplication(component, { providers: [
91
+ provideServerRendering(),
92
+ provideStaticProps(body),
93
+ {
94
+ provide: ɵSERVER_CONTEXT,
95
+ useValue: "analog-server-component"
96
+ },
97
+ {
98
+ provide: APP_ID,
99
+ useFactory() {
100
+ return appId;
101
+ }
102
+ },
103
+ ...config?.providers || []
104
+ ] }, context);
105
+ const html = await renderApplication(bootstrap, {
106
+ url,
107
+ document: `<${selector}></${selector}>`,
108
+ platformProviders: [{
109
+ provide: ɵConsole,
110
+ useFactory() {
111
+ return {
112
+ warn: () => {},
113
+ log: () => {}
114
+ };
115
+ }
116
+ }]
117
+ });
118
+ const responseData = {
119
+ html,
120
+ outputs: retrieveTransferredState(html, appId)
121
+ };
122
+ return new Response(JSON.stringify(responseData), { headers: { "X-Analog-Component": "true" } });
157
123
  }
158
124
  function getComponentLoader(componentReqId) {
159
- let _componentId = `/src/server/components/${componentReqId.toLowerCase()}`;
160
- let componentLoader = undefined;
161
- let componentId = _componentId;
162
- if (components[`${_componentId}.ts`]) {
163
- componentId = `${_componentId}.ts`;
164
- componentLoader = components[componentId];
165
- }
166
- return { componentLoader, componentId };
125
+ const _componentId = `/src/server/components/${componentReqId.toLowerCase()}`;
126
+ let componentLoader = void 0;
127
+ let componentId = _componentId;
128
+ if (components[`${_componentId}.ts`]) {
129
+ componentId = `${_componentId}.ts`;
130
+ componentLoader = components[componentId];
131
+ }
132
+ return {
133
+ componentLoader,
134
+ componentId
135
+ };
167
136
  }
168
137
  function retrieveTransferredState(html, appId) {
169
- const regex = new RegExp(`<script id="${appId}-state" type="application/json">(.*?)<\/script>`);
170
- const match = html.match(regex);
171
- if (match) {
172
- const scriptContent = match[1];
173
- if (scriptContent) {
174
- try {
175
- const parsedContent = JSON.parse(scriptContent);
176
- return parsedContent._analog_output || {};
177
- }
178
- catch (e) {
179
- console.warn('Exception while parsing static outputs for ' + appId, e);
180
- }
181
- }
182
- return {};
183
- }
184
- else {
185
- return {};
186
- }
187
- }
188
-
189
- if (import.meta.env.PROD) {
190
- enableProdMode();
138
+ const regex = new RegExp(`<script id="${appId}-state" type="application/json">(.*?)<\/script>`);
139
+ const match = html.match(regex);
140
+ if (match) {
141
+ const scriptContent = match[1];
142
+ if (scriptContent) try {
143
+ return JSON.parse(scriptContent)._analog_output || {};
144
+ } catch (e) {
145
+ console.warn("Exception while parsing static outputs for " + appId, e);
146
+ }
147
+ return {};
148
+ } else return {};
191
149
  }
150
+ //#endregion
151
+ //#region packages/router/server/src/render.ts
152
+ enableProdMode();
192
153
  /**
193
- * Returns a function that accepts the navigation URL,
194
- * the root HTML, and server context.
195
- *
196
- * @param rootComponent
197
- * @param config
198
- * @param platformProviders
199
- * @returns Promise<string | Reponse>
200
- */
154
+ * Returns a function that accepts the navigation URL,
155
+ * the root HTML, and server context.
156
+ *
157
+ * @param rootComponent
158
+ * @param config
159
+ * @param platformProviders
160
+ * @returns Promise<string | Reponse>
161
+ */
201
162
  function render(rootComponent, config, platformProviders = []) {
202
- function bootstrap(context) {
203
- return bootstrapApplication(rootComponent, config, context);
204
- }
205
- return async function render(url, document, serverContext) {
206
- if (serverComponentRequest(serverContext)) {
207
- return await renderServerComponent(url, serverContext);
208
- }
209
- const html = await renderApplication(bootstrap, {
210
- document,
211
- url,
212
- platformProviders: [
213
- provideServerContext(serverContext),
214
- platformProviders,
215
- ],
216
- });
217
- return html;
218
- };
163
+ function bootstrap(context) {
164
+ return bootstrapApplication(rootComponent, config, context);
165
+ }
166
+ return async function render(url, document, serverContext) {
167
+ if (serverComponentRequest(serverContext)) return await renderServerComponent(url, serverContext);
168
+ return await renderApplication(bootstrap, {
169
+ document,
170
+ url,
171
+ platformProviders: [provideServerContext(serverContext), platformProviders]
172
+ });
173
+ };
219
174
  }
220
-
221
- /**
222
- * Generated bundle index. Do not edit.
223
- */
224
-
175
+ //#endregion
225
176
  export { injectStaticOutputs, injectStaticProps, provideServerContext, render, renderServerComponent, serverComponentRequest };
226
- //# sourceMappingURL=analogjs-router-server.mjs.map
177
+
178
+ //# sourceMappingURL=analogjs-router-server.mjs.map
@@ -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 INTERNAL_FETCH,\n REQUEST,\n RESPONSE,\n ServerInternalFetch,\n ServerRequest,\n ServerResponse,\n} from '@analogjs/router/tokens';\n\nfunction getHeaderValue(\n value: string | string[] | undefined,\n): string | undefined {\n return Array.isArray(value) ? value[0] : value;\n}\n\nfunction getRequestHeader(\n req: ServerRequest,\n name: string,\n): string | undefined {\n const headers = (req as { headers?: unknown }).headers;\n\n if (!headers) {\n return undefined;\n }\n\n if (\n typeof headers === 'object' &&\n headers !== null &&\n 'get' in headers &&\n typeof headers.get === 'function'\n ) {\n return headers.get(name) ?? undefined;\n }\n\n return getHeaderValue(\n (headers as Record<string, string | string[] | undefined>)[name],\n );\n}\n\nexport function provideServerContext({\n req,\n res,\n fetch,\n}: {\n req: ServerRequest;\n res: ServerResponse;\n fetch?: ServerInternalFetch;\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 { provide: INTERNAL_FETCH, useValue: fetch },\n ];\n}\n\nexport function getBaseUrl(req: ServerRequest) {\n const protocol = getRequestProtocol(req);\n const host =\n getRequestHeader(req, 'x-forwarded-host') ??\n getRequestHeader(req, 'host') ??\n 'localhost';\n const originalUrl = req.originalUrl || req.url || '/';\n const parsedUrl = new URL(\n '',\n `${protocol}://${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 const forwardedProto = getRequestHeader(req, 'x-forwarded-proto')\n ?.split(',')[0]\n ?.trim();\n\n if (opts.xForwardedProto !== false && forwardedProto === 'https') {\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 { json as readJsonStream } from 'node:stream/consumers';\n\nimport { provideStaticProps } from './tokens';\n\ntype ComponentLoader = () => Promise<Type<unknown>>;\n\nexport function serverComponentRequest(serverContext: ServerContext) {\n // `ServerContext` is still backed by raw Node req/res, so read the header\n // directly instead of reconstructing an H3Event just for lookup.\n // In h3 v2 / Nitro v3, req may be undefined during fetch-based prerendering\n // (where event.node is not populated), so guard with optional chaining.\n const serverComponentId = serverContext.req?.headers?.[\n 'x-analog-component'\n ] as string | undefined;\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 // Server component requests POST JSON props from the client bridge, so parse\n // the Node request body directly instead of rebuilding an H3Event wrapper.\n const body =\n (await readJsonStream(serverContext.req).catch(() => ({}))) || {};\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","readJsonStream","Console"],"mappings":"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"}
1
+ {"version":3,"file":"analogjs-router-server.mjs","names":[],"sources":["../../server/src/provide-server-context.ts","../../server/src/tokens.ts","../../server/src/server-component-render.ts","../../server/src/render.ts"],"sourcesContent":["import { StaticProvider, ɵresetCompiledComponents } from '@angular/core';\nimport { ɵSERVER_CONTEXT as SERVER_CONTEXT } from '@angular/platform-server';\n\nimport {\n BASE_URL,\n INTERNAL_FETCH,\n REQUEST,\n RESPONSE,\n ServerInternalFetch,\n ServerRequest,\n ServerResponse,\n} from '@analogjs/router/tokens';\n\nfunction getHeaderValue(\n value: string | string[] | undefined,\n): string | undefined {\n return Array.isArray(value) ? value[0] : value;\n}\n\nfunction getRequestHeader(\n req: ServerRequest,\n name: string,\n): string | undefined {\n const headers = (req as { headers?: unknown }).headers;\n\n if (!headers) {\n return undefined;\n }\n\n if (\n typeof headers === 'object' &&\n headers !== null &&\n 'get' in headers &&\n typeof headers.get === 'function'\n ) {\n return headers.get(name) ?? undefined;\n }\n\n return getHeaderValue(\n (headers as Record<string, string | string[] | undefined>)[name],\n );\n}\n\nexport function provideServerContext({\n req,\n res,\n fetch,\n}: {\n req: ServerRequest;\n res: ServerResponse;\n fetch?: ServerInternalFetch;\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 { provide: INTERNAL_FETCH, useValue: fetch },\n ];\n}\n\nexport function getBaseUrl(req: ServerRequest): string {\n const protocol = getRequestProtocol(req);\n const host =\n getRequestHeader(req, 'x-forwarded-host') ??\n getRequestHeader(req, 'host') ??\n 'localhost';\n const originalUrl = req.originalUrl || req.url || '/';\n const parsedUrl = new URL(\n '',\n `${protocol}://${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): string {\n const forwardedProto = getRequestHeader(req, 'x-forwarded-proto')\n ?.split(',')[0]\n ?.trim();\n\n if (opts.xForwardedProto !== false && forwardedProto === 'https') {\n return 'https';\n }\n\n return (req.connection as { encrypted?: boolean })?.encrypted\n ? 'https'\n : '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: InjectionToken<Record<string, any>> =\n new InjectionToken<Record<string, any>>('Static Props');\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(): Record<string, any> {\n assertInInjectionContext(injectStaticProps);\n\n return inject(STATIC_PROPS);\n}\n\nexport function injectStaticOutputs<T>(): { set(data: T): void } {\n const transferState = inject(TransferState);\n const outputsKey = makeStateKey<T>('_analog_output');\n\n return {\n set(data: T): void {\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 { json as readJsonStream } from 'node:stream/consumers';\n\nimport { provideStaticProps } from './tokens';\n\ntype ComponentLoader = () => Promise<Type<unknown>>;\n\nexport function serverComponentRequest(\n serverContext: ServerContext,\n): string | undefined {\n // `ServerContext` is still backed by raw Node req/res, so read the header\n // directly instead of reconstructing an H3Event just for lookup.\n // In h3 v2 / Nitro v3, req may be undefined during fetch-based prerendering\n // (where event.node is not populated), so guard with optional chaining.\n const serverComponentId = serverContext.req?.headers?.[\n 'x-analog-component'\n ] as string | undefined;\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): Promise<Response> {\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 { default?: Type<unknown> })\n .default;\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 // Server component requests POST JSON props from the client bridge, so parse\n // the Node request body directly instead of rebuilding an H3Event wrapper.\n const body =\n (await readJsonStream(serverContext.req).catch(() => ({}))) || {};\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 /* noop */\n },\n log: () => {\n /* noop */\n },\n };\n },\n },\n ],\n });\n\n const outputs = retrieveTransferredState(html, appId);\n const responseData: { html: string; outputs: Record<string, unknown> } = {\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 const _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 ): Promise<string | Response> {\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"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { t as ANALOG_QUERY_STATE_KEY } from "./provide-analog-query.mjs";
2
+ import { TransferState, makeEnvironmentProviders } from "@angular/core";
3
+ import { QueryClient, dehydrate } from "@tanstack/angular-query-experimental";
4
+ import { BEFORE_APP_SERIALIZED } from "@angular/platform-server";
5
+ //#region packages/router/tanstack-query/src/provide-server-analog-query.ts
6
+ var SERVER_ANALOG_QUERY_PROVIDER = {
7
+ provide: BEFORE_APP_SERIALIZED,
8
+ multi: true,
9
+ useFactory: (queryClient, transferState) => {
10
+ return () => {
11
+ transferState.set(ANALOG_QUERY_STATE_KEY, dehydrate(queryClient));
12
+ };
13
+ },
14
+ deps: [QueryClient, TransferState]
15
+ };
16
+ function provideServerAnalogQuery() {
17
+ return makeEnvironmentProviders([SERVER_ANALOG_QUERY_PROVIDER]);
18
+ }
19
+ //#endregion
20
+ export { provideServerAnalogQuery };
21
+
22
+ //# sourceMappingURL=analogjs-router-tanstack-query-server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analogjs-router-tanstack-query-server.mjs","names":[],"sources":["../../tanstack-query/src/provide-server-analog-query.ts"],"sourcesContent":["import { TransferState, makeEnvironmentProviders } from '@angular/core';\nimport type { EnvironmentProviders, Provider } from '@angular/core';\nimport { BEFORE_APP_SERIALIZED } from '@angular/platform-server';\nimport { QueryClient, dehydrate } from '@tanstack/angular-query-experimental';\n\nimport { ANALOG_QUERY_STATE_KEY } from './provide-analog-query';\n\nconst SERVER_ANALOG_QUERY_PROVIDER: Provider = {\n provide: BEFORE_APP_SERIALIZED,\n multi: true,\n useFactory: (queryClient: QueryClient, transferState: TransferState) => {\n return () => {\n transferState.set(ANALOG_QUERY_STATE_KEY, dehydrate(queryClient));\n };\n },\n deps: [QueryClient, TransferState],\n};\n\nexport function provideServerAnalogQuery(): EnvironmentProviders {\n return makeEnvironmentProviders([SERVER_ANALOG_QUERY_PROVIDER]);\n}\n"],"mappings":";;;;;AAOA,IAAM,+BAAyC;CAC7C,SAAS;CACT,OAAO;CACP,aAAa,aAA0B,kBAAiC;AACtE,eAAa;AACX,iBAAkB,IAAA,wBAAwB,UAAU,YAAa,CAAA;;;CAGrE,MAAO,CAAA,aAAa,cAAA;CACrB;AAED,SAAgB,2BAAiD;AAC/D,QAAO,yBAA0B,CAAA,6BAA8B,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { n as provideAnalogQuery, t as ANALOG_QUERY_STATE_KEY } from "./provide-analog-query.mjs";
2
+ import { lastValueFrom } from "rxjs";
3
+ //#region packages/router/tanstack-query/src/server-query.ts
4
+ function buildUrl(base, params) {
5
+ if (!params) return base;
6
+ const parts = [];
7
+ for (const [key, value] of Object.entries(params)) {
8
+ if (value === void 0 || value === null) continue;
9
+ const k = encodeURIComponent(key);
10
+ if (Array.isArray(value)) for (const item of value) parts.push(`${k}=${encodeURIComponent(String(item))}`);
11
+ else parts.push(`${k}=${encodeURIComponent(String(value))}`);
12
+ }
13
+ if (parts.length === 0) return base;
14
+ return `${base}${base.includes("?") ? "&" : "?"}${parts.join("&")}`;
15
+ }
16
+ function serverQueryOptions(http, url, options) {
17
+ const { query, ...rest } = options;
18
+ return {
19
+ ...rest,
20
+ queryFn: () => lastValueFrom(http.get(buildUrl(url, query)))
21
+ };
22
+ }
23
+ function serverMutationOptions(http, url, options) {
24
+ return {
25
+ mutationFn: (body) => lastValueFrom(http.post(url, body)),
26
+ ...options
27
+ };
28
+ }
29
+ function serverInfiniteQueryOptions(http, url, options) {
30
+ const { query: buildQuery, ...rest } = options;
31
+ return {
32
+ ...rest,
33
+ queryFn: (context) => lastValueFrom(http.get(buildUrl(url, buildQuery(context))))
34
+ };
35
+ }
36
+ //#endregion
37
+ export { ANALOG_QUERY_STATE_KEY, provideAnalogQuery, serverInfiniteQueryOptions, serverMutationOptions, serverQueryOptions };
38
+
39
+ //# sourceMappingURL=analogjs-router-tanstack-query.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analogjs-router-tanstack-query.mjs","names":[],"sources":["../../tanstack-query/src/server-query.ts"],"sourcesContent":["import type { HttpClient } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\nimport type {\n CreateQueryOptions,\n CreateMutationOptions,\n CreateInfiniteQueryOptions,\n DefaultError,\n InfiniteData,\n QueryKey,\n} from '@tanstack/angular-query-experimental';\nimport type {\n ServerRouteHandler,\n InferRouteQuery,\n InferRouteBody,\n InferRouteResult,\n} from '@analogjs/router/server/actions';\n\nfunction buildUrl(base: string, params?: Record<string, unknown>): string {\n if (!params) return base;\n const parts: string[] = [];\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === null) continue;\n const k = encodeURIComponent(key);\n if (Array.isArray(value)) {\n for (const item of value) {\n parts.push(`${k}=${encodeURIComponent(String(item))}`);\n }\n } else {\n parts.push(`${k}=${encodeURIComponent(String(value))}`);\n }\n }\n if (parts.length === 0) return base;\n const separator = base.includes('?') ? '&' : '?';\n return `${base}${separator}${parts.join('&')}`;\n}\n\nexport function serverQueryOptions<\n TRoute extends ServerRouteHandler<any, any, any>,\n TError = DefaultError,\n TData = InferRouteResult<TRoute>,\n TQueryKey extends QueryKey = QueryKey,\n>(\n http: HttpClient,\n url: string,\n options: { queryKey: TQueryKey; query?: InferRouteQuery<TRoute> } & Omit<\n CreateQueryOptions<InferRouteResult<TRoute>, TError, TData, TQueryKey>,\n 'queryKey' | 'queryFn'\n >,\n): CreateQueryOptions<InferRouteResult<TRoute>, TError, TData, TQueryKey> {\n const { query, ...rest } = options;\n return {\n ...rest,\n queryFn: () =>\n lastValueFrom(\n http.get<InferRouteResult<TRoute>>(\n buildUrl(url, query as Record<string, any>),\n ),\n ),\n } as CreateQueryOptions<InferRouteResult<TRoute>, TError, TData, TQueryKey>;\n}\n\nexport function serverMutationOptions<\n TRoute extends ServerRouteHandler<any, any, any>,\n TError = DefaultError,\n TOnMutateResult = unknown,\n>(\n http: HttpClient,\n url: string,\n options?: Omit<\n CreateMutationOptions<\n InferRouteResult<TRoute>,\n TError,\n InferRouteBody<TRoute>,\n TOnMutateResult\n >,\n 'mutationFn'\n >,\n): CreateMutationOptions<\n InferRouteResult<TRoute>,\n TError,\n InferRouteBody<TRoute>,\n TOnMutateResult\n> {\n return {\n mutationFn: (body: InferRouteBody<TRoute>) =>\n lastValueFrom(http.post<InferRouteResult<TRoute>>(url, body)),\n ...options,\n } as CreateMutationOptions<\n InferRouteResult<TRoute>,\n TError,\n InferRouteBody<TRoute>,\n TOnMutateResult\n >;\n}\n\nexport function serverInfiniteQueryOptions<\n TRoute extends ServerRouteHandler<any, any, any>,\n TError = DefaultError,\n TData = InfiniteData<InferRouteResult<TRoute>>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n http: HttpClient,\n url: string,\n options: {\n queryKey: TQueryKey;\n query: (context: { pageParam: TPageParam }) => InferRouteQuery<TRoute>;\n initialPageParam: TPageParam;\n getNextPageParam: (\n lastPage: InferRouteResult<TRoute>,\n allPages: InferRouteResult<TRoute>[],\n ) => TPageParam | undefined | null;\n } & Omit<\n CreateInfiniteQueryOptions<\n InferRouteResult<TRoute>,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n 'queryKey' | 'queryFn' | 'initialPageParam' | 'getNextPageParam'\n >,\n): CreateInfiniteQueryOptions<\n InferRouteResult<TRoute>,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> {\n const { query: buildQuery, ...rest } = options;\n return {\n ...rest,\n queryFn: (context: { pageParam: TPageParam }) =>\n lastValueFrom(\n http.get<InferRouteResult<TRoute>>(\n buildUrl(url, buildQuery(context) as Record<string, any>),\n ),\n ),\n } as CreateInfiniteQueryOptions<\n InferRouteResult<TRoute>,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >;\n}\n"],"mappings":";;;AAiBA,SAAS,SAAS,MAAc,QAA0C;AACxE,KAAK,CAAA,OACC,QAAkB;CACxB,MAAK,QAAY,EAAA;AACf,MAAI,MAAA,CAAU,KAAA,UAAa,OAAA,QAAgB,OAAA,EAAA;AACrC,MAAI,UAAA,KAAA,KAAuB,UAAA,KACvB;EACH,MAAM,IAAA,mBAAe,IAAA;AACxB,MAAM,MAAQ,QAAK,MAAA,CAAA,MAAA,MAAA,QAAA,MAEhB,OAAA,KAAA,GAAA,EAAA,GAAA,mBAAA,OAAA,KAAA,CAAA,GAAA;MAIC,OAAA,KAAW,GAAG,EAAA,GAAA,mBAAO,OAAA,MAAA,CAAA,GAAA;;wBAK1B,QAAA;AAcL,QAAO,GAAA,OADW,KAAA,SAAS,IAAA,GAAA,MAAA,MACpB,MAAA,KAAA,IAAA;;SAEL,mBAEI,MACE,KAAA,SAAc;CAGrB,MAAA,EAAA,OAAA,GAAA,SAAA;;EAGI,GAAA;EAsBE,eAAA,cAAA,KAAA,IAAA,SAAA,KAAA,MAAA,CAAA,CAAA;EACL;;SAGD,sBAAA,MAAA,KAAA,SAAA;;EAQI,aAAS,SAAA,cAOd,KACA,KACA,KAAA,KAwBA,CAAA;EACM,GAAE;EACR;;SAEY,2BAED,MACH,KAAA,SAAc;CAGrB,MAAA,EAAA,OAAA,YAAA,GAAA,SAAA"}
@@ -1,29 +1,26 @@
1
- import { InjectionToken, inject } from '@angular/core';
2
-
3
- const REQUEST = new InjectionToken('@analogjs/router Server Request');
4
- const RESPONSE = new InjectionToken('@analogjs/router Server Response');
5
- const BASE_URL = new InjectionToken('@analogjs/router Base URL');
6
- const INTERNAL_FETCH = new InjectionToken('@analogjs/router Internal Server Fetch');
7
- const API_PREFIX = new InjectionToken('@analogjs/router API Prefix');
1
+ import { InjectionToken, inject } from "@angular/core";
2
+ //#region packages/router/tokens/src/index.ts
3
+ var REQUEST = new InjectionToken("@analogjs/router Server Request");
4
+ var RESPONSE = new InjectionToken("@analogjs/router Server Response");
5
+ var BASE_URL = new InjectionToken("@analogjs/router Base URL");
6
+ var INTERNAL_FETCH = new InjectionToken("@analogjs/router Internal Server Fetch");
7
+ var API_PREFIX = new InjectionToken("@analogjs/router API Prefix");
8
8
  function injectRequest() {
9
- return inject(REQUEST, { optional: true });
9
+ return inject(REQUEST, { optional: true });
10
10
  }
11
11
  function injectResponse() {
12
- return inject(RESPONSE, { optional: true });
12
+ return inject(RESPONSE, { optional: true });
13
13
  }
14
14
  function injectBaseURL() {
15
- return inject(BASE_URL, { optional: true });
15
+ return inject(BASE_URL, { optional: true });
16
16
  }
17
17
  function injectInternalServerFetch() {
18
- return inject(INTERNAL_FETCH, { optional: true });
18
+ return inject(INTERNAL_FETCH, { optional: true });
19
19
  }
20
20
  function injectAPIPrefix() {
21
- return inject(API_PREFIX);
21
+ return inject(API_PREFIX);
22
22
  }
23
-
24
- /**
25
- * Generated bundle index. Do not edit.
26
- */
27
-
23
+ //#endregion
28
24
  export { API_PREFIX, BASE_URL, INTERNAL_FETCH, REQUEST, RESPONSE, injectAPIPrefix, injectBaseURL, injectInternalServerFetch, injectRequest, injectResponse };
29
- //# sourceMappingURL=analogjs-router-tokens.mjs.map
25
+
26
+ //# sourceMappingURL=analogjs-router-tokens.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"analogjs-router-tokens.mjs","sources":["../../../../packages/router/tokens/src/index.ts","../../../../packages/router/tokens/src/analogjs-router-tokens.ts"],"sourcesContent":["import { InjectionToken, inject } from '@angular/core';\nimport type { $Fetch } from 'nitro/types';\nimport type {\n IncomingMessage,\n ServerResponse as NodeServerResponse,\n} from 'node:http';\n\nexport type ServerRequest = IncomingMessage & { originalUrl: string };\nexport type ServerResponse = NodeServerResponse;\nexport type ServerInternalFetch = $Fetch;\nexport type ServerContext = {\n req: ServerRequest;\n res: ServerResponse;\n fetch?: ServerInternalFetch;\n};\n\nexport const REQUEST = new InjectionToken<ServerRequest>(\n '@analogjs/router Server Request',\n);\nexport const RESPONSE = new InjectionToken<ServerResponse>(\n '@analogjs/router Server Response',\n);\nexport const BASE_URL = new InjectionToken<string>('@analogjs/router Base URL');\nexport const INTERNAL_FETCH = new InjectionToken<ServerInternalFetch>(\n '@analogjs/router Internal Server Fetch',\n);\n\nexport const API_PREFIX = new InjectionToken<string>(\n '@analogjs/router API Prefix',\n);\n\nexport function injectRequest() {\n return inject(REQUEST, { optional: true });\n}\n\nexport function injectResponse() {\n return inject(RESPONSE, { optional: true });\n}\n\nexport function injectBaseURL() {\n return inject(BASE_URL, { optional: true });\n}\n\nexport function injectInternalServerFetch() {\n return inject(INTERNAL_FETCH, { optional: true });\n}\n\nexport function injectAPIPrefix() {\n return inject(API_PREFIX);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;MAgBa,OAAO,GAAG,IAAI,cAAc,CACvC,iCAAiC;MAEtB,QAAQ,GAAG,IAAI,cAAc,CACxC,kCAAkC;MAEvB,QAAQ,GAAG,IAAI,cAAc,CAAS,2BAA2B;MACjE,cAAc,GAAG,IAAI,cAAc,CAC9C,wCAAwC;MAG7B,UAAU,GAAG,IAAI,cAAc,CAC1C,6BAA6B;SAGf,aAAa,GAAA;IAC3B,OAAO,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5C;SAEgB,cAAc,GAAA;IAC5B,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC7C;SAEgB,aAAa,GAAA;IAC3B,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC7C;SAEgB,yBAAyB,GAAA;IACvC,OAAO,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACnD;SAEgB,eAAe,GAAA;AAC7B,IAAA,OAAO,MAAM,CAAC,UAAU,CAAC;AAC3B;;ACjDA;;AAEG;;;;"}
1
+ {"version":3,"file":"analogjs-router-tokens.mjs","names":[],"sources":["../../tokens/src/index.ts"],"sourcesContent":["import { InjectionToken, inject } from '@angular/core';\nimport type { $Fetch } from 'nitro/types';\nimport type {\n IncomingMessage,\n ServerResponse as NodeServerResponse,\n} from 'node:http';\n\nexport type ServerRequest = IncomingMessage & { originalUrl: string };\nexport type ServerResponse = NodeServerResponse;\nexport type ServerInternalFetch = $Fetch;\nexport type ServerContext = {\n req: ServerRequest;\n res: ServerResponse;\n fetch?: ServerInternalFetch;\n};\n\nexport const REQUEST: InjectionToken<ServerRequest> =\n new InjectionToken<ServerRequest>('@analogjs/router Server Request');\nexport const RESPONSE: InjectionToken<ServerResponse> =\n new InjectionToken<ServerResponse>('@analogjs/router Server Response');\nexport const BASE_URL: InjectionToken<string> = new InjectionToken<string>(\n '@analogjs/router Base URL',\n);\nexport const INTERNAL_FETCH: InjectionToken<ServerInternalFetch> =\n new InjectionToken<ServerInternalFetch>(\n '@analogjs/router Internal Server Fetch',\n );\n\nexport const API_PREFIX: InjectionToken<string> = new InjectionToken<string>(\n '@analogjs/router API Prefix',\n);\n\nexport function injectRequest(): ServerRequest | null {\n return inject(REQUEST, { optional: true });\n}\n\nexport function injectResponse(): ServerResponse | null {\n return inject(RESPONSE, { optional: true });\n}\n\nexport function injectBaseURL(): string | null {\n return inject(BASE_URL, { optional: true });\n}\n\nexport function injectInternalServerFetch(): ServerInternalFetch | null {\n return inject(INTERNAL_FETCH, { optional: true });\n}\n\nexport function injectAPIPrefix(): string {\n return inject(API_PREFIX);\n}\n"],"mappings":";;AAgBA,IAAa,UACX,IAAI,eAA8B,kCAAkC;AACtE,IAAa,WACX,IAAI,eAA+B,mCAAmC;AACxE,IAAa,WAAmC,IAAI,eAClD,4BACD;AACD,IAAa,iBACX,IAAI,eACF,yCACD;AAEH,IAAa,aAAqC,IAAI,eACpD,8BACD;AAED,SAAgB,gBAAsC;AACpD,QAAO,OAAO,SAAW,EAAA,UAAU,MAAO,CAAA;;AAG5C,SAAgB,iBAAwC;AACtD,QAAO,OAAO,UAAY,EAAA,UAAU,MAAO,CAAA;;AAG7C,SAAgB,gBAA+B;AAC7C,QAAO,OAAO,UAAY,EAAA,UAAU,MAAO,CAAA;;AAG7C,SAAgB,4BAAwD;AACtE,QAAO,OAAO,gBAAkB,EAAA,UAAU,MAAO,CAAA;;AAGnD,SAAgB,kBAA0B;AACxC,QAAO,OAAO,WAAW"}