@analogjs/platform 2.8.0-beta.9 → 2.8.0
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/AGENTS.md +5 -3
- package/package.json +3 -3
- package/src/lib/nx-plugin/src/generators/app/versions/nx_18_X/versions.d.ts +5 -5
- package/src/lib/nx-plugin/src/generators/app/versions/nx_18_X/versions.js +5 -5
- package/src/lib/nx-plugin/src/generators/app/versions/nx_18_X/versions.js.map +1 -1
- package/src/lib/nx-plugin/src/utils/versions/ng_19_X/versions.d.ts +5 -5
- package/src/lib/nx-plugin/src/utils/versions/ng_19_X/versions.js +5 -5
- package/src/lib/nx-plugin/src/utils/versions/ng_19_X/versions.js.map +1 -1
- package/src/lib/route-file-discovery.d.ts +3 -1
- package/src/lib/route-file-discovery.js +6 -2
- package/src/lib/route-manifest.d.ts +15 -1
- package/src/lib/route-manifest.js +59 -3
- package/src/lib/ssr/defer-streaming-plugin.d.ts +3 -35
- package/src/lib/ssr/defer-streaming-plugin.js +91 -74
- package/src/lib/typed-routes-plugin.js +50 -2
package/AGENTS.md
CHANGED
|
@@ -30,16 +30,18 @@ Routes are file-based. A file in `src/app/pages/` ending in `.page.ts` becomes a
|
|
|
30
30
|
|
|
31
31
|
Read route params with `inject(ActivatedRoute)` from `@angular/router`.
|
|
32
32
|
|
|
33
|
-
Define per-route metadata (title, meta tags, guards, resolvers) by exporting a `RouteMeta`:
|
|
33
|
+
Define per-route metadata (title, meta tags, guards, resolvers) by exporting a `routeMeta` that satisfies `RouteMeta`:
|
|
34
34
|
|
|
35
35
|
```ts
|
|
36
36
|
import { RouteMeta } from '@analogjs/router';
|
|
37
37
|
|
|
38
|
-
export const routeMeta
|
|
38
|
+
export const routeMeta = {
|
|
39
39
|
title: 'Products',
|
|
40
|
-
};
|
|
40
|
+
} satisfies RouteMeta;
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
+
Prefer `satisfies` over a `RouteMeta` annotation, which widens `data` and `resolve` types.
|
|
44
|
+
|
|
43
45
|
## Server & API routes
|
|
44
46
|
|
|
45
47
|
Server routes live in `src/server/routes/` and use [h3](https://h3.dev). API routes are conventionally under `src/server/routes/api/`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@analogjs/platform",
|
|
3
|
-
"version": "2.8.0
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"description": "The fullstack meta-framework for Angular",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "Brandon Roberts <robertsbt@gmail.com>",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"nitropack": "^2.13.1",
|
|
32
|
-
"@analogjs/vite-plugin-angular": "^2.8.0
|
|
33
|
-
"@analogjs/vite-plugin-nitro": "^2.8.0
|
|
32
|
+
"@analogjs/vite-plugin-angular": "^2.8.0",
|
|
33
|
+
"@analogjs/vite-plugin-nitro": "^2.8.0",
|
|
34
34
|
"oxc-parser": "^0.121.0",
|
|
35
35
|
"vitefu": "^1.1.2"
|
|
36
36
|
},
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export declare const V18_X_NX_DEVKIT = "^20.0.0";
|
|
2
2
|
export declare const V18_X_NX_ANGULAR = "^20.0.0";
|
|
3
|
-
export declare const V18_X_ANALOG_JS_CONTENT = "^2.8.0
|
|
4
|
-
export declare const V18_X_ANALOG_JS_ROUTER = "^2.8.0
|
|
3
|
+
export declare const V18_X_ANALOG_JS_CONTENT = "^2.8.0";
|
|
4
|
+
export declare const V18_X_ANALOG_JS_ROUTER = "^2.8.0";
|
|
5
5
|
export declare const V18_X_ANALOG_JS_TRPC = "~0.4.0";
|
|
6
|
-
export declare const V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.8.0
|
|
7
|
-
export declare const V18_X_ANALOG_JS_VITEST_ANGULAR = "^2.8.0
|
|
6
|
+
export declare const V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.8.0";
|
|
7
|
+
export declare const V18_X_ANALOG_JS_VITEST_ANGULAR = "^2.8.0";
|
|
8
8
|
export declare const V18_X_TRPC_CLIENT = "^10.25.0";
|
|
9
9
|
export declare const V18_X_TRPC_SERVER = "^10.25.0";
|
|
10
10
|
export declare const V18_X_ISOMORPHIC_FETCH = "^3.0.0";
|
|
@@ -20,7 +20,7 @@ export declare const V18_X_TAILWINDCSS = "^4.1.4";
|
|
|
20
20
|
export declare const V18_X_TAILWINDCSS_VITE = "^4.1.4";
|
|
21
21
|
export declare const V18_X_POSTCSS = "^8.5.3";
|
|
22
22
|
export declare const V18_X_AUTOPREFIXER = "^10.4.0";
|
|
23
|
-
export declare const V18_X_ANALOG_JS_PLATFORM = "^2.8.0
|
|
23
|
+
export declare const V18_X_ANALOG_JS_PLATFORM = "^2.8.0";
|
|
24
24
|
export declare const V18_X_ANGULAR_DEVKIT_BUILD_ANGULAR = "^19.0.0";
|
|
25
25
|
export declare const V18_X_NX_VITE = "^21.0.0";
|
|
26
26
|
export declare const V18_X_NX_LINTER = "^21.0.0";
|
|
@@ -5,11 +5,11 @@ exports.V18_X_ZOD = exports.V18_X_VITEST = exports.V18_X_VITE_TSCONFIG_PATHS = e
|
|
|
5
5
|
// dependencies
|
|
6
6
|
exports.V18_X_NX_DEVKIT = '^20.0.0';
|
|
7
7
|
exports.V18_X_NX_ANGULAR = '^20.0.0';
|
|
8
|
-
exports.V18_X_ANALOG_JS_CONTENT = '^2.8.0
|
|
9
|
-
exports.V18_X_ANALOG_JS_ROUTER = '^2.8.0
|
|
8
|
+
exports.V18_X_ANALOG_JS_CONTENT = '^2.8.0';
|
|
9
|
+
exports.V18_X_ANALOG_JS_ROUTER = '^2.8.0';
|
|
10
10
|
exports.V18_X_ANALOG_JS_TRPC = '~0.4.0';
|
|
11
|
-
exports.V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.8.0
|
|
12
|
-
exports.V18_X_ANALOG_JS_VITEST_ANGULAR = '^2.8.0
|
|
11
|
+
exports.V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.8.0';
|
|
12
|
+
exports.V18_X_ANALOG_JS_VITEST_ANGULAR = '^2.8.0';
|
|
13
13
|
exports.V18_X_TRPC_CLIENT = '^10.25.0';
|
|
14
14
|
exports.V18_X_TRPC_SERVER = '^10.25.0';
|
|
15
15
|
exports.V18_X_ISOMORPHIC_FETCH = '^3.0.0';
|
|
@@ -26,7 +26,7 @@ exports.V18_X_TAILWINDCSS_VITE = '^4.1.4';
|
|
|
26
26
|
exports.V18_X_POSTCSS = '^8.5.3';
|
|
27
27
|
exports.V18_X_AUTOPREFIXER = '^10.4.0';
|
|
28
28
|
// devDependencies
|
|
29
|
-
exports.V18_X_ANALOG_JS_PLATFORM = '^2.8.0
|
|
29
|
+
exports.V18_X_ANALOG_JS_PLATFORM = '^2.8.0';
|
|
30
30
|
exports.V18_X_ANGULAR_DEVKIT_BUILD_ANGULAR = '^19.0.0';
|
|
31
31
|
exports.V18_X_NX_VITE = '^21.0.0';
|
|
32
32
|
exports.V18_X_NX_LINTER = '^21.0.0';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../../../../../../../packages/nx-plugin/src/generators/app/versions/nx_18_X/versions.ts"],"names":[],"mappings":";;;AAAA,QAAQ;AACR,eAAe;AACF,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,gBAAgB,GAAG,SAAS,CAAC;AAC7B,QAAA,uBAAuB,GAAG,
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../../../../../../../packages/nx-plugin/src/generators/app/versions/nx_18_X/versions.ts"],"names":[],"mappings":";;;AAAA,QAAQ;AACR,eAAe;AACF,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,gBAAgB,GAAG,SAAS,CAAC;AAC7B,QAAA,uBAAuB,GAAG,QAAQ,CAAC;AACnC,QAAA,sBAAsB,GAAG,QAAQ,CAAC;AAClC,QAAA,oBAAoB,GAAG,QAAQ,CAAC;AAChC,QAAA,mCAAmC,GAAG,QAAQ,CAAC;AAC/C,QAAA,8BAA8B,GAAG,QAAQ,CAAC;AAC1C,QAAA,iBAAiB,GAAG,UAAU,CAAC;AAC/B,QAAA,iBAAiB,GAAG,UAAU,CAAC;AAC/B,QAAA,sBAAsB,GAAG,QAAQ,CAAC;AAClC,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,kBAAkB,GAAG,QAAQ,CAAC;AAC9B,QAAA,YAAY,GAAG,SAAS,CAAC;AACzB,QAAA,2BAA2B,GAAG,QAAQ,CAAC;AACvC,QAAA,sBAAsB,GAAG,QAAQ,CAAC;AAClC,QAAA,mBAAmB,GAAG,SAAS,CAAC;AAChC,QAAA,aAAa,GAAG,SAAS,CAAC;AAC1B,QAAA,aAAa,GAAG,SAAS,CAAC;AAC1B,QAAA,iBAAiB,GAAG,QAAQ,CAAC;AAC7B,QAAA,sBAAsB,GAAG,QAAQ,CAAC;AAClC,QAAA,aAAa,GAAG,QAAQ,CAAC;AACzB,QAAA,kBAAkB,GAAG,SAAS,CAAC;AAE5C,kBAAkB;AACL,QAAA,wBAAwB,GAAG,QAAQ,CAAC;AACpC,QAAA,kCAAkC,GAAG,SAAS,CAAC;AAC/C,QAAA,aAAa,GAAG,SAAS,CAAC;AAC1B,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,WAAW,GAAG,SAAS,CAAC;AACxB,QAAA,UAAU,GAAG,QAAQ,CAAC;AACtB,QAAA,yBAAyB,GAAG,QAAQ,CAAC;AACrC,QAAA,YAAY,GAAG,QAAQ,CAAC;AACxB,QAAA,SAAS,GAAG,SAAS,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export declare const V19_X_ANALOG_JS_ROUTER = "^2.8.0
|
|
2
|
-
export declare const V19_X_ANALOG_JS_CONTENT = "^2.8.0
|
|
1
|
+
export declare const V19_X_ANALOG_JS_ROUTER = "^2.8.0";
|
|
2
|
+
export declare const V19_X_ANALOG_JS_CONTENT = "^2.8.0";
|
|
3
3
|
export declare const V19_X_MARKED = "^15.0.7";
|
|
4
4
|
export declare const V19_X_MARKED_GFM_HEADING_ID = "^4.1.1";
|
|
5
5
|
export declare const V19_X_MARKED_HIGHLIGHT = "^2.2.1";
|
|
6
6
|
export declare const V19_X_MARKED_MANGLE = "^1.1.10";
|
|
7
7
|
export declare const V19_X_PRISMJS = "^1.29.0";
|
|
8
|
-
export declare const V19_X_ANALOG_JS_PLATFORM = "^2.8.0
|
|
9
|
-
export declare const V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.8.0
|
|
10
|
-
export declare const V19_X_ANALOG_JS_VITEST_ANGULAR = "^2.8.0
|
|
8
|
+
export declare const V19_X_ANALOG_JS_PLATFORM = "^2.8.0";
|
|
9
|
+
export declare const V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.8.0";
|
|
10
|
+
export declare const V19_X_ANALOG_JS_VITEST_ANGULAR = "^2.8.0";
|
|
11
11
|
export declare const V19_X_NX_ANGULAR = "^22.0.0";
|
|
12
12
|
export declare const V19_X_NX_VITE = "^22.0.0";
|
|
13
13
|
export declare const V19_X_JSDOM = "^22.0.0";
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NX_X_LATEST_NX = exports.NX_X_LATEST_VITEST = exports.NX_X_LATEST_VITE = exports.V19_X_VITE = exports.V19_X_VITEST = exports.V19_X_VITE_TSCONFIG_PATHS = exports.V19_X_JSDOM = exports.V19_X_NX_VITE = exports.V19_X_NX_ANGULAR = exports.V19_X_ANALOG_JS_VITEST_ANGULAR = exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = exports.V19_X_ANALOG_JS_PLATFORM = exports.V19_X_PRISMJS = exports.V19_X_MARKED_MANGLE = exports.V19_X_MARKED_HIGHLIGHT = exports.V19_X_MARKED_GFM_HEADING_ID = exports.V19_X_MARKED = exports.V19_X_ANALOG_JS_CONTENT = exports.V19_X_ANALOG_JS_ROUTER = void 0;
|
|
4
4
|
// V19_X
|
|
5
|
-
exports.V19_X_ANALOG_JS_ROUTER = '^2.8.0
|
|
6
|
-
exports.V19_X_ANALOG_JS_CONTENT = '^2.8.0
|
|
5
|
+
exports.V19_X_ANALOG_JS_ROUTER = '^2.8.0';
|
|
6
|
+
exports.V19_X_ANALOG_JS_CONTENT = '^2.8.0';
|
|
7
7
|
exports.V19_X_MARKED = '^15.0.7';
|
|
8
8
|
exports.V19_X_MARKED_GFM_HEADING_ID = '^4.1.1';
|
|
9
9
|
exports.V19_X_MARKED_HIGHLIGHT = '^2.2.1';
|
|
10
10
|
exports.V19_X_MARKED_MANGLE = '^1.1.10';
|
|
11
11
|
exports.V19_X_PRISMJS = '^1.29.0';
|
|
12
12
|
// devDependencies
|
|
13
|
-
exports.V19_X_ANALOG_JS_PLATFORM = '^2.8.0
|
|
14
|
-
exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.8.0
|
|
15
|
-
exports.V19_X_ANALOG_JS_VITEST_ANGULAR = '^2.8.0
|
|
13
|
+
exports.V19_X_ANALOG_JS_PLATFORM = '^2.8.0';
|
|
14
|
+
exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.8.0';
|
|
15
|
+
exports.V19_X_ANALOG_JS_VITEST_ANGULAR = '^2.8.0';
|
|
16
16
|
exports.V19_X_NX_ANGULAR = '^22.0.0';
|
|
17
17
|
exports.V19_X_NX_VITE = '^22.0.0';
|
|
18
18
|
exports.V19_X_JSDOM = '^22.0.0';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../../../../../../packages/nx-plugin/src/utils/versions/ng_19_X/versions.ts"],"names":[],"mappings":";;;AAAA,QAAQ;AACK,QAAA,sBAAsB,GAAG,
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../../../../../../packages/nx-plugin/src/utils/versions/ng_19_X/versions.ts"],"names":[],"mappings":";;;AAAA,QAAQ;AACK,QAAA,sBAAsB,GAAG,QAAQ,CAAC;AAClC,QAAA,uBAAuB,GAAG,QAAQ,CAAC;AACnC,QAAA,YAAY,GAAG,SAAS,CAAC;AACzB,QAAA,2BAA2B,GAAG,QAAQ,CAAC;AACvC,QAAA,sBAAsB,GAAG,QAAQ,CAAC;AAClC,QAAA,mBAAmB,GAAG,SAAS,CAAC;AAChC,QAAA,aAAa,GAAG,SAAS,CAAC;AAEvC,kBAAkB;AACL,QAAA,wBAAwB,GAAG,QAAQ,CAAC;AACpC,QAAA,mCAAmC,GAAG,QAAQ,CAAC;AAC/C,QAAA,8BAA8B,GAAG,QAAQ,CAAC;AAC1C,QAAA,gBAAgB,GAAG,SAAS,CAAC;AAC7B,QAAA,aAAa,GAAG,SAAS,CAAC;AAC1B,QAAA,WAAW,GAAG,SAAS,CAAC;AACxB,QAAA,yBAAyB,GAAG,QAAQ,CAAC;AACrC,QAAA,YAAY,GAAG,QAAQ,CAAC;AACxB,QAAA,UAAU,GAAG,QAAQ,CAAC;AACtB,QAAA,gBAAgB,GAAG,QAAQ,CAAC;AAC5B,QAAA,kBAAkB,GAAG,QAAQ,CAAC;AAC9B,QAAA,cAAc,GAAG,SAAS,CAAC"}
|
|
@@ -4,10 +4,12 @@ export interface RouteFileDiscoveryOptions {
|
|
|
4
4
|
additionalPagesDirs: string[];
|
|
5
5
|
additionalContentDirs: string[];
|
|
6
6
|
}
|
|
7
|
+
export type RouteFileKind = 'route' | 'content' | 'server';
|
|
7
8
|
export interface RouteFileDiscovery {
|
|
8
9
|
getRouteFiles(): string[];
|
|
9
10
|
getContentFiles(): string[];
|
|
10
|
-
|
|
11
|
+
/** `server` marks page `.server.ts` files, which affect `load` types only. */
|
|
12
|
+
getDiscoveredFileKind(path: string): RouteFileKind | null;
|
|
11
13
|
updateDiscoveredFile(path: string, event: 'add' | 'change' | 'unlink'): void;
|
|
12
14
|
/**
|
|
13
15
|
* Returns true if the normalized filename was discovered from an app-local
|
|
@@ -50,6 +50,10 @@ export function createRouteFileDiscovery(options) {
|
|
|
50
50
|
additionalPagesRoots.some((dir) => isWithinDir(normalized, dir))) {
|
|
51
51
|
return 'route';
|
|
52
52
|
}
|
|
53
|
+
if (normalized.endsWith('.server.ts') &&
|
|
54
|
+
[`${root}/src/app/pages`, ...additionalPagesRoots].some((dir) => isWithinDir(normalized, dir))) {
|
|
55
|
+
return 'server';
|
|
56
|
+
}
|
|
53
57
|
return null;
|
|
54
58
|
}
|
|
55
59
|
function scanRouteFiles() {
|
|
@@ -119,7 +123,7 @@ export function createRouteFileDiscovery(options) {
|
|
|
119
123
|
updateDiscoveredFile(path, event) {
|
|
120
124
|
ensureInitialized();
|
|
121
125
|
const kind = getDiscoveredFileKind(path);
|
|
122
|
-
if (!kind) {
|
|
126
|
+
if (!kind || kind === 'server') {
|
|
123
127
|
return;
|
|
124
128
|
}
|
|
125
129
|
const normalizedPath = normalizePath_(path);
|
|
@@ -144,4 +148,4 @@ export function createRouteFileDiscovery(options) {
|
|
|
144
148
|
},
|
|
145
149
|
};
|
|
146
150
|
}
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtZmlsZS1kaXNjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3JvdXRlLWZpbGUtZGlzY292ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBNkJ0QyxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLE9BQWtDO0lBRWxDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLEdBQ3ZFLE9BQU8sQ0FBQztJQUVWLElBQUksZUFBZSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDeEMsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzFDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMzQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUM5QixXQUFXLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQztRQUM3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztRQUNwQixDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDbkIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUN6QyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRCxNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5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
|
|
@@ -33,6 +33,8 @@ export interface RouteEntry {
|
|
|
33
33
|
isCatchAll: boolean;
|
|
34
34
|
/** Whether the route contains an optional catch-all parameter */
|
|
35
35
|
isOptionalCatchAll: boolean;
|
|
36
|
+
/** Layout files that wrap this route, outermost first */
|
|
37
|
+
layouts: string[];
|
|
36
38
|
}
|
|
37
39
|
export interface RouteCollision {
|
|
38
40
|
fullPath: string;
|
|
@@ -46,6 +48,8 @@ export interface RouteManifest {
|
|
|
46
48
|
collisions: RouteCollision[];
|
|
47
49
|
/** Canonical route per fullPath — precomputed once to avoid redundant work. */
|
|
48
50
|
canonicalByFullPath: Map<string, RouteEntry>;
|
|
51
|
+
/** Full paths defined by more than one file, such as a layout and its index page. */
|
|
52
|
+
sharedFullPaths: Set<string>;
|
|
49
53
|
}
|
|
50
54
|
/**
|
|
51
55
|
* Converts a discovered filename to a route path pattern.
|
|
@@ -98,7 +102,17 @@ export declare function extractRouteParams(routePath: string): RouteParamInfo[];
|
|
|
98
102
|
* hard-coded path-substring heuristic with config-derived precedence.
|
|
99
103
|
*/
|
|
100
104
|
export declare function generateRouteManifest(filenames: string[], collisionPriority?: (filename: string) => number): RouteManifest;
|
|
105
|
+
/** Import specifiers for a page module's typed exports. */
|
|
106
|
+
export interface RouteModuleImports {
|
|
107
|
+
routeMeta?: string;
|
|
108
|
+
load?: string;
|
|
109
|
+
}
|
|
101
110
|
/**
|
|
102
111
|
* Generates the route-table section for the combined generated route module.
|
|
112
|
+
*
|
|
113
|
+
* `resolveModuleImports` adds `routeMeta` and `load` types for pages whose
|
|
114
|
+
* URL is defined by a single file, along with the `routeMeta` of the layouts
|
|
115
|
+
* that wrap them. URLs shared by several files, such as a layout and its
|
|
116
|
+
* index page, are ambiguous and only get params and query types.
|
|
103
117
|
*/
|
|
104
|
-
export declare function generateRouteTableDeclaration(manifest: RouteManifest): string;
|
|
118
|
+
export declare function generateRouteTableDeclaration(manifest: RouteManifest, resolveModuleImports?: (filename: string) => RouteModuleImports | undefined): string;
|
|
@@ -96,6 +96,7 @@ export function extractRouteParams(routePath) {
|
|
|
96
96
|
export function generateRouteManifest(filenames, collisionPriority) {
|
|
97
97
|
const routes = [];
|
|
98
98
|
const collisions = [];
|
|
99
|
+
const sharedFullPaths = new Set();
|
|
99
100
|
const seenByFullPath = new Map();
|
|
100
101
|
const getPriority = collisionPriority ?? getCollisionPriority;
|
|
101
102
|
// Prefer app-local route files over shared/external sources when two files
|
|
@@ -109,6 +110,16 @@ export function generateRouteManifest(filenames, collisionPriority) {
|
|
|
109
110
|
}
|
|
110
111
|
return a.localeCompare(b);
|
|
111
112
|
});
|
|
113
|
+
// Layout routes are a file and a folder with the same name, so users.page.ts
|
|
114
|
+
// wraps users/[id].page.ts but not users.[id].page.ts. Folders from all
|
|
115
|
+
// pages dirs share one tree.
|
|
116
|
+
const layoutByKey = new Map();
|
|
117
|
+
for (const filename of prioritizedFilenames) {
|
|
118
|
+
const key = toRouteFileKey(filename);
|
|
119
|
+
if (!filename.endsWith('.md') && !layoutByKey.has(key)) {
|
|
120
|
+
layoutByKey.set(key, filename);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
112
123
|
for (const filename of prioritizedFilenames) {
|
|
113
124
|
const fullPath = filenameToRoutePath(filename);
|
|
114
125
|
const params = extractRouteParams(fullPath);
|
|
@@ -143,6 +154,7 @@ export function generateRouteManifest(filenames, collisionPriority) {
|
|
|
143
154
|
};
|
|
144
155
|
if (isLayoutIndexPair(winner.filename, filename) ||
|
|
145
156
|
isLayoutIndexPair(filename, winner.filename)) {
|
|
157
|
+
sharedFullPaths.add(fullPath);
|
|
146
158
|
continue;
|
|
147
159
|
}
|
|
148
160
|
collisions.push({
|
|
@@ -158,6 +170,13 @@ export function generateRouteManifest(filenames, collisionPriority) {
|
|
|
158
170
|
}
|
|
159
171
|
seenByFullPath.set(collisionKey, { filename, priority: currentPriority });
|
|
160
172
|
}
|
|
173
|
+
const segments = toRouteFileKey(filename).split('/');
|
|
174
|
+
const layouts = [];
|
|
175
|
+
for (let i = 1; i < segments.length; i++) {
|
|
176
|
+
const layout = layoutByKey.get(segments.slice(0, i).join('/'));
|
|
177
|
+
if (layout)
|
|
178
|
+
layouts.push(layout);
|
|
179
|
+
}
|
|
161
180
|
routes.push({
|
|
162
181
|
id,
|
|
163
182
|
path: fullPath,
|
|
@@ -171,6 +190,7 @@ export function generateRouteManifest(filenames, collisionPriority) {
|
|
|
171
190
|
isGroup: isPathlessLayout,
|
|
172
191
|
isCatchAll: params.some((param) => param.type === 'catchAll'),
|
|
173
192
|
isOptionalCatchAll: params.some((param) => param.type === 'optionalCatchAll'),
|
|
193
|
+
layouts,
|
|
174
194
|
});
|
|
175
195
|
}
|
|
176
196
|
routes.sort((a, b) => {
|
|
@@ -204,8 +224,16 @@ export function generateRouteManifest(filenames, collisionPriority) {
|
|
|
204
224
|
if (route.parentId) {
|
|
205
225
|
routeById.get(route.parentId)?.children.push(route.id);
|
|
206
226
|
}
|
|
227
|
+
if (routeByFullPath.get(route.fullPath) !== route) {
|
|
228
|
+
sharedFullPaths.add(route.fullPath);
|
|
229
|
+
}
|
|
207
230
|
}
|
|
208
|
-
return {
|
|
231
|
+
return {
|
|
232
|
+
routes,
|
|
233
|
+
collisions,
|
|
234
|
+
canonicalByFullPath: routeByFullPath,
|
|
235
|
+
sharedFullPaths,
|
|
236
|
+
};
|
|
209
237
|
}
|
|
210
238
|
function canonicalRoutesByFullPath(routes) {
|
|
211
239
|
const map = new Map();
|
|
@@ -228,6 +256,10 @@ function canonicalRoutesByFullPath(routes) {
|
|
|
228
256
|
}
|
|
229
257
|
return map;
|
|
230
258
|
}
|
|
259
|
+
/** A route file's path within its pages directory, e.g. `users/[id]`. */
|
|
260
|
+
function toRouteFileKey(filename) {
|
|
261
|
+
return filename.replace(/^.*?[\\/](?:routes|pages|content)[\\/]|\.page\.(?:js|ts|analog|ag)$|\.(?:ts|md|analog|ag)$/g, '');
|
|
262
|
+
}
|
|
231
263
|
function isPathlessLayoutId(id) {
|
|
232
264
|
const segments = id.split('/').filter(Boolean);
|
|
233
265
|
if (segments.length === 0)
|
|
@@ -255,20 +287,44 @@ function getCollisionPriority(filename) {
|
|
|
255
287
|
}
|
|
256
288
|
/**
|
|
257
289
|
* Generates the route-table section for the combined generated route module.
|
|
290
|
+
*
|
|
291
|
+
* `resolveModuleImports` adds `routeMeta` and `load` types for pages whose
|
|
292
|
+
* URL is defined by a single file, along with the `routeMeta` of the layouts
|
|
293
|
+
* that wrap them. URLs shared by several files, such as a layout and its
|
|
294
|
+
* index page, are ambiguous and only get params and query types.
|
|
258
295
|
*/
|
|
259
|
-
export function generateRouteTableDeclaration(manifest) {
|
|
296
|
+
export function generateRouteTableDeclaration(manifest, resolveModuleImports) {
|
|
260
297
|
const lines = [];
|
|
261
298
|
lines.push('/** @noprettier */');
|
|
262
299
|
lines.push('// This file is auto-generated by @analogjs/platform');
|
|
263
300
|
lines.push("import type {} from '@analogjs/router';");
|
|
264
301
|
lines.push("declare module '@analogjs/router' {");
|
|
265
302
|
lines.push(' interface AnalogRouteTable {');
|
|
303
|
+
const importType = (specifier, name) => `typeof import(${JSON.stringify(specifier)}).${name}`;
|
|
266
304
|
for (const route of manifest.canonicalByFullPath.values()) {
|
|
267
305
|
const paramsType = generateParamsType(route.params);
|
|
268
306
|
const queryType = 'Record<string, string | string[] | undefined>';
|
|
269
307
|
lines.push(` ${JSON.stringify(route.fullPath)}: {`);
|
|
270
308
|
lines.push(` params: ${paramsType};`);
|
|
271
309
|
lines.push(` query: ${queryType};`);
|
|
310
|
+
if (resolveModuleImports &&
|
|
311
|
+
route.kind === 'page' &&
|
|
312
|
+
!manifest.sharedFullPaths.has(route.fullPath)) {
|
|
313
|
+
const layoutRouteMeta = route.layouts.flatMap((layout) => {
|
|
314
|
+
const specifier = resolveModuleImports(layout)?.routeMeta;
|
|
315
|
+
return specifier ? [importType(specifier, 'routeMeta')] : [];
|
|
316
|
+
});
|
|
317
|
+
const imports = resolveModuleImports(route.filename);
|
|
318
|
+
if (layoutRouteMeta.length) {
|
|
319
|
+
lines.push(` layoutRouteMeta: [${layoutRouteMeta.join(', ')}];`);
|
|
320
|
+
}
|
|
321
|
+
if (imports?.routeMeta) {
|
|
322
|
+
lines.push(` routeMeta: ${importType(imports.routeMeta, 'routeMeta')};`);
|
|
323
|
+
}
|
|
324
|
+
if (imports?.load) {
|
|
325
|
+
lines.push(` load: ${importType(imports.load, 'load')};`);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
272
328
|
lines.push(` };`);
|
|
273
329
|
}
|
|
274
330
|
lines.push(' }');
|
|
@@ -335,4 +391,4 @@ function computeLocalPath(fullPath, parentFullPath) {
|
|
|
335
391
|
const suffix = fullPath.slice(parentFullPath.length).replace(/^\/+/, '');
|
|
336
392
|
return suffix || '/';
|
|
337
393
|
}
|
|
338
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtbWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3JvdXRlLW1hbmlmZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBaURIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxRQUFnQjtJQUNsRCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUN6Qiw2S0FBNkssRUFDN0ssRUFBRSxDQUNILENBQUM7SUFFRixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDOUIsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN4RCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLDRDQUE0QztRQUM1QyxPQUFPLE1BQU0sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNILHdFQUF3RTtJQUN4RSx5REFBeUQ7SUFDekQsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RCw0Q0FBNEM7SUFDNUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FB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
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtbWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3JvdXRlLW1hbmlmZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBcURIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxRQUFnQjtJQUNsRCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUN6Qiw2S0FBNkssRUFDN0ssRUFBRSxDQUNILENBQUM7SUFFRixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDOUIsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN4RCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLDRDQUE0QztRQUM1QyxPQUFPLE1BQU0sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNILHdFQUF3RTtJQUN4RSx5REFBeUQ7SUFDekQsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RCw0Q0FBNEM7SUFDNUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FB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
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import type { Plugin } from 'vite';
|
|
2
|
-
/**
|
|
3
|
-
* Minimum Angular major whose compiled `@angular/core` FESM matches the
|
|
4
|
-
* streaming patch anchors. Incremental hydration is a stable public API from
|
|
5
|
-
* v20 (`withIncrementalHydration`, `@publicApi 20.0`), but v20's FESM inlines
|
|
6
|
-
* the injection anchor's `DeferBlockStateEnd` profiler event to its numeric
|
|
7
|
-
* ordinal, whereas v21+ keeps the symbolic `ProfilerEvent.DeferBlockStateEnd`
|
|
8
|
-
* form the anchor matches on. Keying on the literal ordinal would be fragile
|
|
9
|
-
* (enum values shift between versions), so v21 is the floor.
|
|
10
|
-
*/
|
|
2
|
+
/** Minimum Angular major qualified for streaming; the actual runtime shape is checked below. */
|
|
11
3
|
export declare const MIN_STREAMING_ANGULAR_MAJOR = 21;
|
|
12
4
|
/**
|
|
13
5
|
* Whether the streaming SSR patch can be applied to the installed Angular.
|
|
@@ -16,33 +8,9 @@ export declare const MIN_STREAMING_ANGULAR_MAJOR = 21;
|
|
|
16
8
|
* build time and falls back to buffered rendering.
|
|
17
9
|
*/
|
|
18
10
|
export declare function streamingSupportedOnAngular(major: number | null): boolean;
|
|
19
|
-
/**
|
|
20
|
-
* Pure transform that injects the streaming-SSR per-block resolution hook into
|
|
21
|
-
* `@angular/core`'s compiled output. It is the same class of transform as
|
|
22
|
-
* `i18nDefRegistryPlugin` in ./ssr-build-plugin — a string patch of Angular's
|
|
23
|
-
* bundle applied only to SSR builds. Exported separately so it can be unit
|
|
24
|
-
* tested against a bundle string.
|
|
25
|
-
*
|
|
26
|
-
* Two edits, both keyed on single-occurrence anchors in the module that holds
|
|
27
|
-
* the defer runtime:
|
|
28
|
-
* 1. Inside `applyDeferBlockState`, fire `globalThis.__analogSsrDeferCapture`
|
|
29
|
-
* when a `@defer` block reaches `Complete` on the server, passing the
|
|
30
|
-
* block's live `lContainer` — this is the per-block resolution signal a
|
|
31
|
-
* streaming renderer consumes.
|
|
32
|
-
* 2. Expose `collectNativeNodesInLContainer` via `globalThis.__analogSsrInternals`
|
|
33
|
-
* so the renderer can serialize a block's subtree.
|
|
34
|
-
*
|
|
35
|
-
* Returns `null` when the module is not the one carrying the defer runtime, so
|
|
36
|
-
* it is a no-op on every other Angular module.
|
|
37
|
-
*/
|
|
11
|
+
/** Inject capture before the named defer function's final profiler call, preserving its original source. */
|
|
38
12
|
export declare function injectDeferStreamingHook(code: string): string | null;
|
|
39
|
-
/**
|
|
40
|
-
* Classify an `@angular/core` module for the streaming patch. The patch anchors
|
|
41
|
-
* on internal symbol names, so when Angular changes those the transform would
|
|
42
|
-
* otherwise become a silent no-op and streaming would degrade to buffered with
|
|
43
|
-
* no signal. This distinguishes "not the target module" (skip quietly) from
|
|
44
|
-
* "this IS the `@defer` runtime module but the anchors drifted" (worth warning).
|
|
45
|
-
*/
|
|
13
|
+
/** Inspect the named function's final profiler call without depending on enum ordinals. */
|
|
46
14
|
export declare function inspectAngularCoreModule(code: string): {
|
|
47
15
|
kind: 'not-target';
|
|
48
16
|
} | {
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* streaming patch anchors. Incremental hydration is a stable public API from
|
|
4
|
-
* v20 (`withIncrementalHydration`, `@publicApi 20.0`), but v20's FESM inlines
|
|
5
|
-
* the injection anchor's `DeferBlockStateEnd` profiler event to its numeric
|
|
6
|
-
* ordinal, whereas v21+ keeps the symbolic `ProfilerEvent.DeferBlockStateEnd`
|
|
7
|
-
* form the anchor matches on. Keying on the literal ordinal would be fragile
|
|
8
|
-
* (enum values shift between versions), so v21 is the floor.
|
|
9
|
-
*/
|
|
1
|
+
import { parseSync } from 'oxc-parser';
|
|
2
|
+
/** Minimum Angular major qualified for streaming; the actual runtime shape is checked below. */
|
|
10
3
|
export const MIN_STREAMING_ANGULAR_MAJOR = 21;
|
|
11
4
|
/**
|
|
12
5
|
* Whether the streaming SSR patch can be applied to the installed Angular.
|
|
@@ -17,66 +10,80 @@ export const MIN_STREAMING_ANGULAR_MAJOR = 21;
|
|
|
17
10
|
export function streamingSupportedOnAngular(major) {
|
|
18
11
|
return major === null || major >= MIN_STREAMING_ANGULAR_MAJOR;
|
|
19
12
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
13
|
+
function analyzeDeferRuntime(code) {
|
|
14
|
+
if (!code.includes('function applyDeferBlockState('))
|
|
15
|
+
return { kind: 'not-target' };
|
|
16
|
+
const parsed = parseSync('angular-core.mjs', code);
|
|
17
|
+
if (parsed.errors.length)
|
|
18
|
+
return { kind: 'drifted', reason: 'invalid Angular core JavaScript' };
|
|
19
|
+
const fn = parsed.program.body.find((node) => node.type === 'FunctionDeclaration' &&
|
|
20
|
+
node.id?.name === 'applyDeferBlockState');
|
|
21
|
+
if (!fn || fn.type !== 'FunctionDeclaration' || !fn.body)
|
|
22
|
+
return { kind: 'not-target' };
|
|
23
|
+
const names = fn.params
|
|
24
|
+
.map((param) => (param.type === 'Identifier' ? param.name : ''))
|
|
25
|
+
.join(',');
|
|
26
|
+
if (names !== 'newState,lDetails,lContainer,tNode,hostLView')
|
|
27
|
+
return {
|
|
28
|
+
kind: 'drifted',
|
|
29
|
+
reason: 'changed applyDeferBlockState parameters',
|
|
30
|
+
};
|
|
31
|
+
const collector = parsed.program.body.some((node) => node.type === 'FunctionDeclaration' &&
|
|
32
|
+
node.id?.name === 'collectNativeNodesInLContainer');
|
|
33
|
+
if (!collector)
|
|
34
|
+
return {
|
|
35
|
+
kind: 'drifted',
|
|
36
|
+
reason: 'missing collectNativeNodesInLContainer',
|
|
37
|
+
};
|
|
38
|
+
const offset = profilerEndOffset(fn.body.body[fn.body.body.length - 1]);
|
|
39
|
+
return offset === undefined
|
|
40
|
+
? { kind: 'drifted', reason: 'missing DeferBlockStateEnd profiler anchor' }
|
|
41
|
+
: { kind: 'patchable', offset };
|
|
42
|
+
}
|
|
43
|
+
function profilerEndOffset(statement) {
|
|
44
|
+
if (statement?.type !== 'ExpressionStatement' ||
|
|
45
|
+
statement.expression.type !== 'CallExpression')
|
|
46
|
+
return;
|
|
47
|
+
const call = statement.expression;
|
|
48
|
+
if (call.callee.type !== 'Identifier' ||
|
|
49
|
+
call.callee.name !== 'profiler' ||
|
|
50
|
+
call.arguments.length !== 1)
|
|
51
|
+
return;
|
|
52
|
+
return isEndEvent(call.arguments[0]) ? statement.start : undefined;
|
|
53
|
+
}
|
|
54
|
+
function isEndEvent(event) {
|
|
55
|
+
if (event?.type === 'Literal')
|
|
56
|
+
return typeof event.value === 'number';
|
|
57
|
+
return (event?.type === 'MemberExpression' &&
|
|
58
|
+
!event.computed &&
|
|
59
|
+
event.object.type === 'Identifier' &&
|
|
60
|
+
event.object.name === 'ProfilerEvent' &&
|
|
61
|
+
event.property.type === 'Identifier' &&
|
|
62
|
+
event.property.name === 'DeferBlockStateEnd');
|
|
63
|
+
}
|
|
64
|
+
function patchDeferRuntime(code, offset) {
|
|
65
|
+
if (code.includes('globalThis.__analogSsrDeferCapture({'))
|
|
66
|
+
return code;
|
|
48
67
|
const capture = `try { if (newState === DeferBlockState.Complete && ` +
|
|
49
68
|
`typeof ngServerMode !== 'undefined' && ngServerMode && ` +
|
|
50
69
|
`typeof globalThis.__analogSsrDeferCapture === 'function') { ` +
|
|
51
70
|
`globalThis.__analogSsrDeferCapture({ ssrUniqueId: lDetails[SSR_UNIQUE_ID], lContainer, hostLView }); } } catch (e) {}\n `;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
return out;
|
|
71
|
+
return (code.slice(0, offset) +
|
|
72
|
+
capture +
|
|
73
|
+
code.slice(offset) +
|
|
74
|
+
'\nglobalThis.__analogSsrInternals = Object.assign(globalThis.__analogSsrInternals || {}, { collectNativeNodesInLContainer });\n');
|
|
58
75
|
}
|
|
59
|
-
/**
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
76
|
+
/** Inject capture before the named defer function's final profiler call, preserving its original source. */
|
|
77
|
+
export function injectDeferStreamingHook(code) {
|
|
78
|
+
const info = analyzeDeferRuntime(code);
|
|
79
|
+
return info.kind === 'patchable'
|
|
80
|
+
? patchDeferRuntime(code, info.offset)
|
|
81
|
+
: null;
|
|
82
|
+
}
|
|
83
|
+
/** Inspect the named function's final profiler call without depending on enum ordinals. */
|
|
66
84
|
export function inspectAngularCoreModule(code) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
const missing = [];
|
|
71
|
-
if (!code.includes('profiler(ProfilerEvent.DeferBlockStateEnd);')) {
|
|
72
|
-
missing.push('DeferBlockStateEnd profiler anchor');
|
|
73
|
-
}
|
|
74
|
-
if (!code.includes('function collectNativeNodesInLContainer(')) {
|
|
75
|
-
missing.push('collectNativeNodesInLContainer');
|
|
76
|
-
}
|
|
77
|
-
return missing.length === 0
|
|
78
|
-
? { kind: 'patchable' }
|
|
79
|
-
: { kind: 'drifted', reason: `missing ${missing.join(', ')}` };
|
|
85
|
+
const info = analyzeDeferRuntime(code);
|
|
86
|
+
return info.kind === 'patchable' ? { kind: 'patchable' } : info;
|
|
80
87
|
}
|
|
81
88
|
/**
|
|
82
89
|
* Vite plugin that applies {@link injectDeferStreamingHook} to `@angular/core`
|
|
@@ -90,11 +97,17 @@ export function inspectAngularCoreModule(code) {
|
|
|
90
97
|
* that falls back to buffered rendering.
|
|
91
98
|
*/
|
|
92
99
|
export function deferStreamingPlugin() {
|
|
93
|
-
|
|
94
|
-
|
|
100
|
+
const applied = new Set();
|
|
101
|
+
const warnedDrift = new Set();
|
|
95
102
|
return {
|
|
96
103
|
name: 'analogjs-defer-streaming',
|
|
97
104
|
enforce: 'post',
|
|
105
|
+
config() {
|
|
106
|
+
return {
|
|
107
|
+
ssr: { noExternal: ['@angular/core'] },
|
|
108
|
+
environments: { ssr: { optimizeDeps: { exclude: ['@angular/core'] } } },
|
|
109
|
+
};
|
|
110
|
+
},
|
|
98
111
|
transform: {
|
|
99
112
|
filter: {
|
|
100
113
|
id: /\/@angular\/core\//,
|
|
@@ -102,12 +115,13 @@ export function deferStreamingPlugin() {
|
|
|
102
115
|
handler(code, _id, options) {
|
|
103
116
|
if (!options?.ssr)
|
|
104
117
|
return;
|
|
105
|
-
const
|
|
118
|
+
const environment = this.environment.name;
|
|
119
|
+
const info = analyzeDeferRuntime(code);
|
|
106
120
|
if (info.kind === 'not-target')
|
|
107
121
|
return;
|
|
108
122
|
if (info.kind === 'drifted') {
|
|
109
|
-
if (!warnedDrift) {
|
|
110
|
-
warnedDrift
|
|
123
|
+
if (!warnedDrift.has(environment)) {
|
|
124
|
+
warnedDrift.add(environment);
|
|
111
125
|
this.warn(`experimental streaming SSR: found @angular/core's @defer runtime ` +
|
|
112
126
|
`but could not apply the resolution hook (${info.reason}). The ` +
|
|
113
127
|
`installed Angular version likely changed internals the patch ` +
|
|
@@ -115,15 +129,18 @@ export function deferStreamingPlugin() {
|
|
|
115
129
|
}
|
|
116
130
|
return;
|
|
117
131
|
}
|
|
118
|
-
const out =
|
|
119
|
-
|
|
120
|
-
return;
|
|
121
|
-
applied = true;
|
|
132
|
+
const out = patchDeferRuntime(code, info.offset);
|
|
133
|
+
applied.add(environment);
|
|
122
134
|
return { code: out };
|
|
123
135
|
},
|
|
124
136
|
},
|
|
125
137
|
buildEnd() {
|
|
126
|
-
|
|
138
|
+
// Require coverage from the SSR service. A later Nitro rebundle may
|
|
139
|
+
// also encounter Angular modules imported by endpoint handlers.
|
|
140
|
+
const environment = this.environment.name;
|
|
141
|
+
if (environment !== 'ssr')
|
|
142
|
+
return;
|
|
143
|
+
if (!applied.has(environment) && !warnedDrift.has(environment)) {
|
|
127
144
|
this.warn(`experimental streaming SSR is enabled but @angular/core's @defer ` +
|
|
128
145
|
`runtime module was never encountered during the SSR build, so the ` +
|
|
129
146
|
`resolution hook was not injected. Streaming will fall back to ` +
|
|
@@ -132,4 +149,4 @@ export function deferStreamingPlugin() {
|
|
|
132
149
|
},
|
|
133
150
|
};
|
|
134
151
|
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmZXItc3RyZWFtaW5nLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvc3NyL2RlZmVyLXN0cmVhbWluZy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBaUMsTUFBTSxZQUFZLENBQUM7QUFFdEUsZ0dBQWdHO0FBQ2hHLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUU5Qzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxLQUFvQjtJQUM5RCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxJQUFJLDJCQUEyQixDQUFDO0FBQ2hFLENBQUM7QUFPRCxTQUFTLG1CQUFtQixDQUFDLElBQVk7SUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0NBQWdDLENBQUM7UUFDbEQsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07UUFDdEIsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGlDQUFpQyxFQUFFLENBQUM7SUFDeEUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNqQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsSUFBSSxDQUFDLElBQUksS0FBSyxxQkFBcUI7UUFDbkMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEtBQUssc0JBQXNCLENBQzNDLENBQUM7SUFDRixJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLElBQUksQ0FBQyxFQUFFLENBQUMsSUFB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
|
|
@@ -35,8 +35,27 @@ export function typedRoutes(options = {}) {
|
|
|
35
35
|
if (command === 'build' && collisions.length) {
|
|
36
36
|
throw new Error(`[analog] Route collisions detected: ${collisions.map((c) => `${c.fullPath}: ${c.keptFile}, ${c.droppedFile}`).join('; ')}`);
|
|
37
37
|
}
|
|
38
|
-
const output = generateRouteTableDeclaration(manifest);
|
|
39
38
|
const outputPath = join(root, outFile);
|
|
39
|
+
const output = generateRouteTableDeclaration(manifest, (filename) => {
|
|
40
|
+
const pageFile = [
|
|
41
|
+
join(root, filename),
|
|
42
|
+
join(workspaceRoot, filename),
|
|
43
|
+
filename,
|
|
44
|
+
].find((file) => existsSync(file));
|
|
45
|
+
if (!pageFile)
|
|
46
|
+
return undefined;
|
|
47
|
+
const serverFile = pageFile.replace(/\.page\.ts$/, '.server.ts');
|
|
48
|
+
return {
|
|
49
|
+
routeMeta: hasNamedExport(pageFile, 'routeMeta')
|
|
50
|
+
? toImportSpecifier(dirname(outputPath), pageFile)
|
|
51
|
+
: undefined,
|
|
52
|
+
load: serverFile !== pageFile &&
|
|
53
|
+
existsSync(serverFile) &&
|
|
54
|
+
hasNamedExport(serverFile, 'load')
|
|
55
|
+
? toImportSpecifier(dirname(outputPath), serverFile)
|
|
56
|
+
: undefined,
|
|
57
|
+
};
|
|
58
|
+
});
|
|
40
59
|
const exists = existsSync(outputPath);
|
|
41
60
|
const current = exists ? readFileSync(outputPath, 'utf8') : '';
|
|
42
61
|
if (current !== output && !sameDeclarations(current, output)) {
|
|
@@ -88,6 +107,35 @@ export function typedRoutes(options = {}) {
|
|
|
88
107
|
},
|
|
89
108
|
};
|
|
90
109
|
}
|
|
110
|
+
function toImportSpecifier(fromDir, file) {
|
|
111
|
+
const specifier = normalizePath(relative(fromDir, file)).replace(/\.ts$/, '');
|
|
112
|
+
return specifier.startsWith('.') ? specifier : `./${specifier}`;
|
|
113
|
+
}
|
|
114
|
+
function hasNamedExport(file, name) {
|
|
115
|
+
const source = readFileSync(file, 'utf8');
|
|
116
|
+
if (!source.includes(name))
|
|
117
|
+
return false;
|
|
118
|
+
const { program, errors } = parseSync(file, source);
|
|
119
|
+
if (errors.length)
|
|
120
|
+
return false;
|
|
121
|
+
return program.body.some((statement) => {
|
|
122
|
+
if (statement.type !== 'ExportNamedDeclaration' ||
|
|
123
|
+
statement.exportKind === 'type') {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
const declaration = statement.declaration;
|
|
127
|
+
if (declaration?.type === 'VariableDeclaration') {
|
|
128
|
+
return declaration.declarations.some((item) => item.id.type === 'Identifier' && item.id.name === name);
|
|
129
|
+
}
|
|
130
|
+
if (declaration?.type === 'FunctionDeclaration') {
|
|
131
|
+
return declaration.id?.name === name;
|
|
132
|
+
}
|
|
133
|
+
return statement.specifiers.some((specifier) => specifier.exportKind !== 'type' &&
|
|
134
|
+
(specifier.exported.type === 'Identifier'
|
|
135
|
+
? specifier.exported.name
|
|
136
|
+
: specifier.exported.value) === name);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
91
139
|
function sameDeclarations(current, output) {
|
|
92
140
|
const left = parseSync('routeTree.gen.d.ts', current);
|
|
93
141
|
const right = parseSync('routeTree.gen.d.ts', output);
|
|
@@ -97,4 +145,4 @@ function sameDeclarations(current, output) {
|
|
|
97
145
|
return (JSON.stringify(left.program, withoutFormatting) ===
|
|
98
146
|
JSON.stringify(right.program, withoutFormatting));
|
|
99
147
|
}
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWQtcm91dGVzLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvdHlwZWQtcm91dGVzLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRWxELE9BQU8sRUFDTCx3QkFBd0IsR0FFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLDZCQUE2QixHQUM5QixNQUFNLHFCQUFxQixDQUFDO0FBZTdCLE1BQU0sVUFBVSxXQUFXLENBQUMsVUFBb0MsRUFBRTtJQUNoRSxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM1RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLHdCQUF3QixDQUFDO0lBQzVELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FDYiwwR0FBMEcsQ0FDM0csQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLE9BQTBCLENBQUM7SUFDL0IsSUFBSSxTQUE2QixDQUFDO0lBRWxDLElBQUksZUFBMkMsQ0FB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
|