@analogjs/platform 2.5.0-beta.43 → 2.5.0-beta.44
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/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/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/platform-plugin.js +3 -4
- package/src/lib/ssr/ssr-build-plugin.d.ts +14 -1
- package/src/lib/ssr/ssr-build-plugin.js +63 -22
- package/src/lib/i18n-component-registry-plugin.d.ts +0 -17
- package/src/lib/i18n-component-registry-plugin.js +0 -141
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@analogjs/platform",
|
|
3
|
-
"version": "2.5.0-beta.
|
|
3
|
+
"version": "2.5.0-beta.44",
|
|
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.5.0-beta.
|
|
33
|
-
"@analogjs/vite-plugin-nitro": "^2.5.0-beta.
|
|
32
|
+
"@analogjs/vite-plugin-angular": "^2.5.0-beta.44",
|
|
33
|
+
"@analogjs/vite-plugin-nitro": "^2.5.0-beta.44",
|
|
34
34
|
"vitefu": "^1.1.2"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
@@ -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.5.0-beta.
|
|
4
|
-
export declare const V18_X_ANALOG_JS_ROUTER = "^2.5.0-beta.
|
|
3
|
+
export declare const V18_X_ANALOG_JS_CONTENT = "^2.5.0-beta.44";
|
|
4
|
+
export declare const V18_X_ANALOG_JS_ROUTER = "^2.5.0-beta.44";
|
|
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.5.0-beta.
|
|
7
|
-
export declare const V18_X_ANALOG_JS_VITEST_ANGULAR = "^2.5.0-beta.
|
|
6
|
+
export declare const V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.5.0-beta.44";
|
|
7
|
+
export declare const V18_X_ANALOG_JS_VITEST_ANGULAR = "^2.5.0-beta.44";
|
|
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.5.0-beta.
|
|
23
|
+
export declare const V18_X_ANALOG_JS_PLATFORM = "^2.5.0-beta.44";
|
|
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.5.0-beta.
|
|
9
|
-
exports.V18_X_ANALOG_JS_ROUTER = '^2.5.0-beta.
|
|
8
|
+
exports.V18_X_ANALOG_JS_CONTENT = '^2.5.0-beta.44';
|
|
9
|
+
exports.V18_X_ANALOG_JS_ROUTER = '^2.5.0-beta.44';
|
|
10
10
|
exports.V18_X_ANALOG_JS_TRPC = '~0.4.0';
|
|
11
|
-
exports.V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.5.0-beta.
|
|
12
|
-
exports.V18_X_ANALOG_JS_VITEST_ANGULAR = '^2.5.0-beta.
|
|
11
|
+
exports.V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.5.0-beta.44';
|
|
12
|
+
exports.V18_X_ANALOG_JS_VITEST_ANGULAR = '^2.5.0-beta.44';
|
|
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.5.0-beta.
|
|
29
|
+
exports.V18_X_ANALOG_JS_PLATFORM = '^2.5.0-beta.44';
|
|
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,13 +1,13 @@
|
|
|
1
|
-
export declare const V19_X_ANALOG_JS_ROUTER = "^2.5.0-beta.
|
|
2
|
-
export declare const V19_X_ANALOG_JS_CONTENT = "^2.5.0-beta.
|
|
1
|
+
export declare const V19_X_ANALOG_JS_ROUTER = "^2.5.0-beta.44";
|
|
2
|
+
export declare const V19_X_ANALOG_JS_CONTENT = "^2.5.0-beta.44";
|
|
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.5.0-beta.
|
|
9
|
-
export declare const V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.5.0-beta.
|
|
10
|
-
export declare const V19_X_ANALOG_JS_VITEST_ANGULAR = "^2.5.0-beta.
|
|
8
|
+
export declare const V19_X_ANALOG_JS_PLATFORM = "^2.5.0-beta.44";
|
|
9
|
+
export declare const V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.5.0-beta.44";
|
|
10
|
+
export declare const V19_X_ANALOG_JS_VITEST_ANGULAR = "^2.5.0-beta.44";
|
|
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_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.5.0-beta.
|
|
6
|
-
exports.V19_X_ANALOG_JS_CONTENT = '^2.5.0-beta.
|
|
5
|
+
exports.V19_X_ANALOG_JS_ROUTER = '^2.5.0-beta.44';
|
|
6
|
+
exports.V19_X_ANALOG_JS_CONTENT = '^2.5.0-beta.44';
|
|
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.5.0-beta.
|
|
14
|
-
exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.5.0-beta.
|
|
15
|
-
exports.V19_X_ANALOG_JS_VITEST_ANGULAR = '^2.5.0-beta.
|
|
13
|
+
exports.V19_X_ANALOG_JS_PLATFORM = '^2.5.0-beta.44';
|
|
14
|
+
exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.5.0-beta.44';
|
|
15
|
+
exports.V19_X_ANALOG_JS_VITEST_ANGULAR = '^2.5.0-beta.44';
|
|
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,7 +1,7 @@
|
|
|
1
1
|
import viteNitroPlugin from '@analogjs/vite-plugin-nitro';
|
|
2
2
|
import angular from '@analogjs/vite-plugin-angular';
|
|
3
3
|
import { routerPlugin } from './router-plugin.js';
|
|
4
|
-
import { ssrBuildPlugin } from './ssr/ssr-build-plugin.js';
|
|
4
|
+
import { ssrBuildPlugin, i18nDefRegistryPlugin, } from './ssr/ssr-build-plugin.js';
|
|
5
5
|
import { contentPlugin } from './content-plugin.js';
|
|
6
6
|
import { clearClientPageEndpointsPlugin } from './clear-client-page-endpoint.js';
|
|
7
7
|
import { ssrXhrBuildPlugin } from './ssr/ssr-xhr-plugin.js';
|
|
@@ -9,7 +9,6 @@ import { depsPlugin } from './deps-plugin.js';
|
|
|
9
9
|
import { injectHTMLPlugin } from './ssr/inject-html-plugin.js';
|
|
10
10
|
import { serverModePlugin } from '../server-mode-plugin.js';
|
|
11
11
|
import { i18nExtractPlugin } from './i18n-extract-plugin.js';
|
|
12
|
-
import { i18nComponentRegistryPlugin } from './i18n-component-registry-plugin.js';
|
|
13
12
|
export function platformPlugin(opts = {}) {
|
|
14
13
|
const isTest = process.env['NODE_ENV'] === 'test' || !!process.env['VITEST'];
|
|
15
14
|
const { ...platformOptions } = {
|
|
@@ -61,10 +60,10 @@ export function platformPlugin(opts = {}) {
|
|
|
61
60
|
serverModePlugin(),
|
|
62
61
|
ssrXhrBuildPlugin(),
|
|
63
62
|
clearClientPageEndpointsPlugin(),
|
|
64
|
-
...(platformOptions.i18n ? [
|
|
63
|
+
...(platformOptions.i18n ? [i18nDefRegistryPlugin()] : []),
|
|
65
64
|
...(platformOptions.i18n?.extract
|
|
66
65
|
? [i18nExtractPlugin(platformOptions.i18n)]
|
|
67
66
|
: []),
|
|
68
67
|
];
|
|
69
68
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9wbGF0Zm9ybS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxlQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxPQUFPLE1BQU0sK0JBQStCLENBQUM7QUFHcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxjQUFjLEVBQ2QscUJBQXFCLEdBQ3RCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RCxNQUFNLFVBQVUsY0FBYyxDQUFDLE9BQWdCLEVBQUU7SUFDL0MsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0UsTUFBTSxFQUFFLEdBQUcsZUFBZSxFQUFFLEdBQUc7UUFDN0IsR0FBRyxFQUFFLElBQUk7UUFDVCxHQUFHLElBQUk7S0FDUixDQUFDO0lBRUYsSUFBSSxZQUFZLEdBQUcsZUFBZSxFQUFFLEtBQUssQ0FBQztJ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
|
|
@@ -1,2 +1,15 @@
|
|
|
1
|
-
import { Plugin } from 'vite';
|
|
1
|
+
import { type Plugin } from 'vite';
|
|
2
2
|
export declare function ssrBuildPlugin(): Plugin;
|
|
3
|
+
/**
|
|
4
|
+
* Vite plugin that patches `@angular/core`'s `getComponentId()` to
|
|
5
|
+
* mirror every compiled component definition to a global Set, bypassing
|
|
6
|
+
* the `ngServerMode` guard that normally prevents registration on the
|
|
7
|
+
* server. The set lives at `globalThis.__ngComponentDefs` and is read by
|
|
8
|
+
* `@analogjs/router`'s SSR render function to null cached `tView`
|
|
9
|
+
* objects between requests so that `$localize` tagged templates in
|
|
10
|
+
* `consts()` re-evaluate with the freshly loaded translations.
|
|
11
|
+
*
|
|
12
|
+
* Only active when the platform's `i18n` option is configured.
|
|
13
|
+
* Only transforms `@angular/core` modules in SSR builds.
|
|
14
|
+
*/
|
|
15
|
+
export declare function i18nDefRegistryPlugin(): Plugin;
|
|
@@ -2,30 +2,71 @@ import { normalizePath } from 'vite';
|
|
|
2
2
|
export function ssrBuildPlugin() {
|
|
3
3
|
return {
|
|
4
4
|
name: 'analogjs-ssr-build-plugin',
|
|
5
|
-
transform
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
.replace('
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
5
|
+
transform: {
|
|
6
|
+
filter: {
|
|
7
|
+
id: {
|
|
8
|
+
include: [/zone-node/, /platform-server/, /domino\/lib\/sloppy/],
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
handler(code, id) {
|
|
12
|
+
if (id.includes('zone-node') &&
|
|
13
|
+
code.includes('const global = globalThis;')) {
|
|
14
|
+
return {
|
|
15
|
+
code: code.replace('const global = globalThis;', ''),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (id.includes('platform-server')) {
|
|
19
|
+
return {
|
|
20
|
+
code: code
|
|
21
|
+
.replace('new xhr2.XMLHttpRequest', 'new (xhr2.default.XMLHttpRequest || xhr2.default)')
|
|
22
|
+
.replaceAll('global.', 'globalThis.')
|
|
23
|
+
.replaceAll('global,', 'globalThis,')
|
|
24
|
+
.replaceAll(' global[', ' globalThis['),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (id.includes(normalizePath('domino/lib/sloppy.js'))) {
|
|
28
|
+
return {
|
|
29
|
+
code: code.replace(/with\(/gi, 'if('),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return;
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Vite plugin that patches `@angular/core`'s `getComponentId()` to
|
|
39
|
+
* mirror every compiled component definition to a global Set, bypassing
|
|
40
|
+
* the `ngServerMode` guard that normally prevents registration on the
|
|
41
|
+
* server. The set lives at `globalThis.__ngComponentDefs` and is read by
|
|
42
|
+
* `@analogjs/router`'s SSR render function to null cached `tView`
|
|
43
|
+
* objects between requests so that `$localize` tagged templates in
|
|
44
|
+
* `consts()` re-evaluate with the freshly loaded translations.
|
|
45
|
+
*
|
|
46
|
+
* Only active when the platform's `i18n` option is configured.
|
|
47
|
+
* Only transforms `@angular/core` modules in SSR builds.
|
|
48
|
+
*/
|
|
49
|
+
export function i18nDefRegistryPlugin() {
|
|
50
|
+
const DETECT_MARKER = 'GENERATED_COMP_IDS.set(compId, componentDef.type);';
|
|
51
|
+
const RETURN_STMT = 'return compId;\n}';
|
|
52
|
+
return {
|
|
53
|
+
name: 'analogjs-i18n-def-registry',
|
|
54
|
+
enforce: 'post',
|
|
55
|
+
transform: {
|
|
56
|
+
filter: {
|
|
57
|
+
id: /\/@angular\/core\//,
|
|
58
|
+
},
|
|
59
|
+
handler(code, id, options) {
|
|
60
|
+
if (!options?.ssr)
|
|
61
|
+
return;
|
|
62
|
+
if (!code.includes(DETECT_MARKER))
|
|
63
|
+
return;
|
|
23
64
|
return {
|
|
24
|
-
code: code.replace(
|
|
65
|
+
code: code.replace(RETURN_STMT, '(globalThis.__ngComponentDefs ??= new Set()).add(componentDef);\n' +
|
|
66
|
+
RETURN_STMT),
|
|
25
67
|
};
|
|
26
|
-
}
|
|
27
|
-
return;
|
|
68
|
+
},
|
|
28
69
|
},
|
|
29
70
|
};
|
|
30
71
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWJ1aWxkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvc3NyL3Nzci1idWlsZC1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBcUMsTUFBTSxNQUFNLENBQUM7QUFFeEUsTUFBTSxVQUFVLGNBQWM7SUFDNUIsT0FBTztRQUNMLElBQUksRUFBRSwyQkFBMkI7UUFDakMsU0FBUyxFQUFFO1lBQ1QsTUFBTSxFQUFFO2dCQUNOLEVBQUUsRUFBRTtvQkFDRixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLENBQUM7aUJBQ2pFO2FBQ0Y7WUFDRCxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2QsSUFDRSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxFQUMzQyxDQUFDO29CQUNELE9BQU87d0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxDQUFDO3FCQUNyRCxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztvQkFDbkMsT0FBTzt3QkFDTCxJQUFJLEVBQUUsSUFBSTs2QkFDUCxPQUFPLENBQ04seUJBQXlCLEVBQ3pCLG1EQUFtRCxDQUNwRDs2QkFDQSxVQUFVLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQzs2QkFDcEMsVUFBVSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUM7NkJBQ3BDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDO3FCQUMxQyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdkQsT0FBTzt3QkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO3FCQUN0QyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsT0FBTztZQUNULENBQUM7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE1BQU0sYUFBYSxHQUFHLG9EQUFvRCxDQUFDO0lBQzNFLE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDO0lBRXhDLE9BQU87UUFDTCxJQUFJLEVBQUUsNEJBQTRCO1FBQ2xDLE9BQU8sRUFBRSxNQUFNO1FBRWYsU0FBUyxFQUFFO1lBQ1QsTUFBTSxFQUFFO2dCQUNOLEVBQUUsRUFBRSxvQkFBb0I7YUFDekI7WUFDRCxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPO2dCQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUc7b0JBQUUsT0FBTztnQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO29CQUFFLE9BQU87Z0JBRTFDLE9BQU87b0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQ2hCLFdBQVcsRUFDWCxtRUFBbUU7d0JBQ2pFLFdBQVcsQ0FDZDtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Plugin } from 'vite';
|
|
2
|
-
/**
|
|
3
|
-
* Vite plugin that instruments compiled Angular component definitions with
|
|
4
|
-
* calls to `registerI18nComponentDef()` from `@analogjs/router`. This
|
|
5
|
-
* populates a process-level registry of component definitions that the
|
|
6
|
-
* server renderer uses to null cached `tView` objects between SSR requests,
|
|
7
|
-
* allowing `$localize` tagged templates in `consts()` to re-evaluate with
|
|
8
|
-
* the freshly loaded translations for each request's locale.
|
|
9
|
-
*
|
|
10
|
-
* The plugin runs in `enforce: 'post'` so that it sees the compiled
|
|
11
|
-
* JavaScript output from the Angular compiler (which contains the
|
|
12
|
-
* `ClassName.ɵcmp = ɵɵdefineComponent({...})` assignments).
|
|
13
|
-
*
|
|
14
|
-
* Only active when the platform's `i18n` option is configured.
|
|
15
|
-
* Only transforms modules loaded for the SSR environment.
|
|
16
|
-
*/
|
|
17
|
-
export declare function i18nComponentRegistryPlugin(): Plugin;
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import MagicString from 'magic-string';
|
|
2
|
-
/**
|
|
3
|
-
* Vite plugin that instruments compiled Angular component definitions with
|
|
4
|
-
* calls to `registerI18nComponentDef()` from `@analogjs/router`. This
|
|
5
|
-
* populates a process-level registry of component definitions that the
|
|
6
|
-
* server renderer uses to null cached `tView` objects between SSR requests,
|
|
7
|
-
* allowing `$localize` tagged templates in `consts()` to re-evaluate with
|
|
8
|
-
* the freshly loaded translations for each request's locale.
|
|
9
|
-
*
|
|
10
|
-
* The plugin runs in `enforce: 'post'` so that it sees the compiled
|
|
11
|
-
* JavaScript output from the Angular compiler (which contains the
|
|
12
|
-
* `ClassName.ɵcmp = ɵɵdefineComponent({...})` assignments).
|
|
13
|
-
*
|
|
14
|
-
* Only active when the platform's `i18n` option is configured.
|
|
15
|
-
* Only transforms modules loaded for the SSR environment.
|
|
16
|
-
*/
|
|
17
|
-
export function i18nComponentRegistryPlugin() {
|
|
18
|
-
return {
|
|
19
|
-
name: 'analogjs-i18n-component-registry',
|
|
20
|
-
enforce: 'post',
|
|
21
|
-
transform(code, id, options) {
|
|
22
|
-
if (!options?.ssr)
|
|
23
|
-
return;
|
|
24
|
-
if (!code.includes('.ɵcmp'))
|
|
25
|
-
return;
|
|
26
|
-
if (id.includes('node_modules'))
|
|
27
|
-
return;
|
|
28
|
-
if (!id.match(/\.(ts|js)(\?|$)/))
|
|
29
|
-
return;
|
|
30
|
-
const ast = this.parse(code);
|
|
31
|
-
const classNames = findComponentClassNames(ast);
|
|
32
|
-
if (classNames.size === 0)
|
|
33
|
-
return;
|
|
34
|
-
const registrations = [...classNames]
|
|
35
|
-
.map((name) => `__analog_i18n_reg(${name});`)
|
|
36
|
-
.join('\n');
|
|
37
|
-
// Use MagicString so the source map stays aligned with the original
|
|
38
|
-
// file — prepended imports and appended registration calls must not
|
|
39
|
-
// shift line numbers for frames that land inside the user's code.
|
|
40
|
-
const s = new MagicString(code);
|
|
41
|
-
s.prepend(`import { ɵregisterI18nComponentDef as __analog_i18n_reg } from '@analogjs/router';\n`);
|
|
42
|
-
s.append(`\n${registrations}\n`);
|
|
43
|
-
return {
|
|
44
|
-
code: s.toString(),
|
|
45
|
-
map: s.generateMap({
|
|
46
|
-
hires: true,
|
|
47
|
-
source: id,
|
|
48
|
-
includeContent: true,
|
|
49
|
-
}),
|
|
50
|
-
};
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Walks the AST to find class names whose definitions include a `ɵcmp`
|
|
56
|
-
* static property assignment — the marker Angular uses for compiled
|
|
57
|
-
* component definitions.
|
|
58
|
-
*
|
|
59
|
-
* Handles two codegen styles:
|
|
60
|
-
*
|
|
61
|
-
* Production (tree-shaken):
|
|
62
|
-
* _ClassName.ɵcmp = ɵɵdefineComponent({...})
|
|
63
|
-
* → AssignmentExpression left: MemberExpression(.ɵcmp) object: Identifier
|
|
64
|
-
*
|
|
65
|
-
* Dev mode (class fields):
|
|
66
|
-
* class Foo { static { this.ɵcmp = i0.ɵɵdefineComponent({...}) } }
|
|
67
|
-
* → ClassDeclaration → StaticBlock → AssignmentExpression left: MemberExpression(.ɵcmp) object: ThisExpression
|
|
68
|
-
*/
|
|
69
|
-
function findComponentClassNames(ast) {
|
|
70
|
-
const names = new Set();
|
|
71
|
-
walk(ast, (node) => {
|
|
72
|
-
// Prod: top-level `Identifier.ɵcmp = ...`
|
|
73
|
-
if (node.type === 'AssignmentExpression' &&
|
|
74
|
-
isNode(node.left) &&
|
|
75
|
-
node.left.type === 'MemberExpression' &&
|
|
76
|
-
isNode(node.left.property) &&
|
|
77
|
-
node.left.property.name === 'ɵcmp' &&
|
|
78
|
-
isNode(node.left.object) &&
|
|
79
|
-
node.left.object.type === 'Identifier') {
|
|
80
|
-
const name = node.left.object.name;
|
|
81
|
-
if (name !== 'this') {
|
|
82
|
-
names.add(name);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// Dev: ClassDeclaration containing `this.ɵcmp = ...` in a static block
|
|
86
|
-
if ((node.type === 'ClassDeclaration' || node.type === 'ClassExpression') &&
|
|
87
|
-
isNode(node.id) &&
|
|
88
|
-
node.id.name) {
|
|
89
|
-
const className = node.id.name;
|
|
90
|
-
if (classHasCmpDef(node)) {
|
|
91
|
-
names.add(className);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
return names;
|
|
96
|
-
}
|
|
97
|
-
function classHasCmpDef(classNode) {
|
|
98
|
-
let found = false;
|
|
99
|
-
walk(classNode, (node) => {
|
|
100
|
-
if (found)
|
|
101
|
-
return;
|
|
102
|
-
// static ɵcmp = ... (PropertyDefinition)
|
|
103
|
-
if (node.type === 'PropertyDefinition' &&
|
|
104
|
-
node.static === true &&
|
|
105
|
-
isNode(node.key) &&
|
|
106
|
-
node.key.name === 'ɵcmp') {
|
|
107
|
-
found = true;
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
// static { this.ɵcmp = ... }
|
|
111
|
-
if (node.type === 'AssignmentExpression' &&
|
|
112
|
-
isNode(node.left) &&
|
|
113
|
-
node.left.type === 'MemberExpression' &&
|
|
114
|
-
isNode(node.left.property) &&
|
|
115
|
-
node.left.property.name === 'ɵcmp' &&
|
|
116
|
-
isNode(node.left.object) &&
|
|
117
|
-
node.left.object.type === 'ThisExpression') {
|
|
118
|
-
found = true;
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
return found;
|
|
122
|
-
}
|
|
123
|
-
function isNode(v) {
|
|
124
|
-
return v != null && typeof v === 'object' && 'type' in v;
|
|
125
|
-
}
|
|
126
|
-
function walk(node, visitor) {
|
|
127
|
-
visitor(node);
|
|
128
|
-
for (const key of Object.keys(node)) {
|
|
129
|
-
const child = node[key];
|
|
130
|
-
if (Array.isArray(child)) {
|
|
131
|
-
for (const item of child) {
|
|
132
|
-
if (isNode(item))
|
|
133
|
-
walk(item, visitor);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
else if (isNode(child)) {
|
|
137
|
-
walk(child, visitor);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1jb21wb25lbnQtcmVnaXN0cnktcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9pMThuLWNvbXBvbmVudC1yZWdpc3RyeS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFDO0FBRXZDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQjtJQUN6QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxPQUFPLEVBQUUsTUFBTTtRQUVmLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU87WUFDekIsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHO2dCQUFFLE9BQU87WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUFFLE9BQU87WUFDcEMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQkFBRSxPQUFPO1lBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO2dCQUFFLE9BQU87WUFFekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQXVCLENBQUM7WUFDbkQsTUFBTSxVQUFVLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFaEQsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUM7Z0JBQUUsT0FBTztZQUVsQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO2lCQUNsQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQztpQkFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWQsb0VBQW9FO1lBQ3BFLG9FQUFvRTtZQUNwRSxrRUFBa0U7WUFDbEUsTUFB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
|