@analogjs/platform
Version:
The fullstack meta-framework for Angular
72 lines • 4.85 kB
JavaScript
import { normalizePath } from 'vite';
export function ssrBuildPlugin() {
return {
name: 'analogjs-ssr-build-plugin',
transform: {
filter: {
id: {
include: [/zone-node/, /platform-server/, /domino\/lib\/sloppy/],
},
},
handler(code, id) {
if (id.includes('zone-node') &&
code.includes('const global = globalThis;')) {
return {
code: code.replace('const global = globalThis;', ''),
};
}
if (id.includes('platform-server')) {
return {
code: code
.replace('new xhr2.XMLHttpRequest', 'new (xhr2.default.XMLHttpRequest || xhr2.default)')
.replaceAll('global.', 'globalThis.')
.replaceAll('global,', 'globalThis,')
.replaceAll(' global[', ' globalThis['),
};
}
if (id.includes(normalizePath('domino/lib/sloppy.js'))) {
return {
code: code.replace(/with\(/gi, 'if('),
};
}
return;
},
},
};
}
/**
* Vite plugin that patches `@angular/core`'s `getComponentId()` to
* mirror every compiled component definition to a global Set, bypassing
* the `ngServerMode` guard that normally prevents registration on the
* server. The set lives at `globalThis.__ngComponentDefs` and is read by
* `@analogjs/router`'s SSR render function to null cached `tView`
* objects between requests so that `$localize` tagged templates in
* `consts()` re-evaluate with the freshly loaded translations.
*
* Only active when the platform's `i18n` option is configured.
* Only transforms `@angular/core` modules in SSR builds.
*/
export function i18nDefRegistryPlugin() {
const DETECT_MARKER = 'GENERATED_COMP_IDS.set(compId, componentDef.type);';
const RETURN_STMT = 'return compId;\n}';
return {
name: 'analogjs-i18n-def-registry',
enforce: 'post',
transform: {
filter: {
id: /\/@angular\/core\//,
},
handler(code, id, options) {
if (!options?.ssr)
return;
if (!code.includes(DETECT_MARKER))
return;
return {
code: code.replace(RETURN_STMT, '(globalThis.__ngComponentDefs ??= new Set()).add(componentDef);\n' +
RETURN_STMT),
};
},
},
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWJ1aWxkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvc3NyL3Nzci1idWlsZC1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBcUMsTUFBTSxNQUFNLENBQUM7QUFFeEUsTUFBTSxVQUFVLGNBQWM7SUFDNUIsT0FBTztRQUNMLElBQUksRUFBRSwyQkFBMkI7UUFDakMsU0FBUyxFQUFFO1lBQ1QsTUFBTSxFQUFFO2dCQUNOLEVBQUUsRUFBRTtvQkFDRixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLENBQUM7aUJBQ2pFO2FBQ0Y7WUFDRCxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2QsSUFDRSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxFQUMzQyxDQUFDO29CQUNELE9BQU87d0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxDQUFDO3FCQUNyRCxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztvQkFDbkMsT0FBTzt3QkFDTCxJQUFJLEVBQUUsSUFBSTs2QkFDUCxPQUFPLENBQ04seUJBQXlCLEVBQ3pCLG1EQUFtRCxDQUNwRDs2QkFDQSxVQUFVLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQzs2QkFDcEMsVUFBVSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUM7NkJBQ3BDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDO3FCQUMxQyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdkQsT0FBTzt3QkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO3FCQUN0QyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsT0FBTztZQUNULENBQUM7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE1BQU0sYUFBYSxHQUFHLG9EQUFvRCxDQUFDO0lBQzNFLE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDO0lBRXhDLE9BQU87UUFDTCxJQUFJLEVBQUUsNEJBQTRCO1FBQ2xDLE9BQU8sRUFBRSxNQUFNO1FBRWYsU0FBUyxFQUFFO1lBQ1QsTUFBTSxFQUFFO2dCQUNOLEVBQUUsRUFBRSxvQkFBb0I7YUFDekI7WUFDRCxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPO2dCQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUc7b0JBQUUsT0FBTztnQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO29CQUFFLE9BQU87Z0JBRTFDLE9BQU87b0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQ2hCLFdBQVcsRUFDWCxtRUFBbUU7d0JBQ2pFLFdBQVcsQ0FDZDtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMifQ==