@analogjs/platform 0.1.0-beta.2 → 0.1.0-beta.4
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 +1 -1
- package/src/lib/build-server.d.ts +3 -0
- package/src/lib/build-server.js +20 -0
- package/src/lib/options.d.ts +4 -0
- package/src/lib/platform-plugin.js +10 -4
- package/src/lib/router-plugin.js +16 -2
- package/src/lib/runtime/api-middleware.d.ts +2 -0
- package/src/lib/runtime/api-middleware.js +9 -0
- package/src/lib/runtime/renderer.d.ts +2 -0
- package/src/lib/runtime/renderer.js +14 -0
- package/src/lib/ssr/build.d.ts +3 -0
- package/src/lib/ssr/build.js +18 -0
- package/src/lib/ssr/dev-server-plugin.d.ts +7 -0
- package/src/lib/ssr/dev-server-plugin.js +90 -0
- package/src/lib/ssr/ssr-build-plugin.d.ts +2 -0
- package/src/lib/ssr/ssr-build-plugin.js +34 -0
- package/src/lib/vite-nitro-plugin.d.ts +2 -1
- package/src/lib/vite-nitro-plugin.js +55 -22
package/package.json
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildServer = void 0;
|
|
4
|
+
const load_esm_1 = require("@angular-devkit/build-angular/src/utils/load-esm");
|
|
5
|
+
async function buildServer(options, nitroConfig) {
|
|
6
|
+
const { createNitro, build, prepare, copyPublicAssets, prerender } = await (0, load_esm_1.loadEsmModule)('nitropack');
|
|
7
|
+
const nitro = await createNitro({
|
|
8
|
+
dev: false,
|
|
9
|
+
...nitroConfig,
|
|
10
|
+
});
|
|
11
|
+
await prepare(nitro);
|
|
12
|
+
await copyPublicAssets(nitro);
|
|
13
|
+
await prerender(nitro);
|
|
14
|
+
if (!options?.prerender) {
|
|
15
|
+
await build(nitro);
|
|
16
|
+
}
|
|
17
|
+
await nitro.close();
|
|
18
|
+
}
|
|
19
|
+
exports.buildServer = buildServer;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9idWlsZC1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0VBQWlGO0FBSzFFLEtBQUssVUFBVSxXQUFXLENBQy9CLE9BQWlCLEVBQ2pCLFdBQXlCO0lBRXpCLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsR0FDaEUsTUFBTSxJQUFBLHdCQUFhLEVBQTZCLFdBQVcsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDO1FBQzlCLEdBQUcsRUFBRSxLQUFLO1FBQ1YsR0FBRyxXQUFXO0tBQ2YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV2QixJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtRQUN2QixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNwQjtJQUVELE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCLENBQUM7QUFwQkQsa0NBb0JDIn0=
|
package/src/lib/options.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { PluginOptions } from '@analogjs/vite-plugin-angular';
|
|
2
2
|
import { NitroConfig } from 'nitropack';
|
|
3
3
|
export interface Options {
|
|
4
|
+
ssr?: boolean;
|
|
5
|
+
ssrBuildDir?: string;
|
|
6
|
+
prerender?: boolean;
|
|
7
|
+
entryServer?: string;
|
|
4
8
|
vite?: PluginOptions;
|
|
5
9
|
nitro?: NitroConfig;
|
|
6
10
|
}
|
|
@@ -4,12 +4,18 @@ exports.platformPlugin = void 0;
|
|
|
4
4
|
const vite_plugin_angular_1 = require("@analogjs/vite-plugin-angular");
|
|
5
5
|
const vite_nitro_plugin_1 = require("./vite-nitro-plugin");
|
|
6
6
|
const router_plugin_1 = require("./router-plugin");
|
|
7
|
-
|
|
7
|
+
const dev_server_plugin_1 = require("./ssr/dev-server-plugin");
|
|
8
|
+
const ssr_build_plugin_1 = require("./ssr/ssr-build-plugin");
|
|
9
|
+
function platformPlugin(opts = {}) {
|
|
8
10
|
return [
|
|
9
|
-
(0, vite_nitro_plugin_1.viteNitroPlugin)(opts?.nitro),
|
|
10
|
-
|
|
11
|
+
(0, vite_nitro_plugin_1.viteNitroPlugin)(opts, opts?.nitro),
|
|
12
|
+
(opts.ssr ? (0, ssr_build_plugin_1.ssrBuildPlugin)() : false),
|
|
11
13
|
...(0, router_plugin_1.routerPlugin)(),
|
|
14
|
+
(opts.ssr
|
|
15
|
+
? (0, dev_server_plugin_1.devServerPlugin)({ entryServer: opts.entryServer })
|
|
16
|
+
: false),
|
|
17
|
+
...(0, vite_plugin_angular_1.default)(opts?.vite),
|
|
12
18
|
];
|
|
13
19
|
}
|
|
14
20
|
exports.platformPlugin = platformPlugin;
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9wbGF0Zm9ybS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdUVBQW9EO0FBRXBELDJEQUFzRDtBQUN0RCxtREFBK0M7QUFDL0MsK0RBQTBEO0FBQzFELDZEQUF3RDtBQUV4RCxTQUFnQixjQUFjLENBQUMsT0FBZ0IsRUFBRTtJQUMvQyxPQUFPO1FBQ0wsSUFBQSxtQ0FBZSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQ2xDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBQSxpQ0FBYyxHQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBVztRQUMvQyxHQUFHLElBQUEsNEJBQVksR0FBRTtRQUNqQixDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ1AsQ0FBQyxDQUFDLElBQUEsbUNBQWUsRUFBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEQsQ0FBQyxDQUFDLEtBQUssQ0FBVztRQUNwQixHQUFHLElBQUEsNkJBQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0tBQ3ZCLENBQUM7QUFDSixDQUFDO0FBVkQsd0NBVUMifQ==
|
package/src/lib/router-plugin.js
CHANGED
|
@@ -11,11 +11,25 @@ exports.routerPlugin = void 0;
|
|
|
11
11
|
*/
|
|
12
12
|
function routerPlugin() {
|
|
13
13
|
return [
|
|
14
|
+
{
|
|
15
|
+
name: 'analogjs-router-plugin',
|
|
16
|
+
config() {
|
|
17
|
+
return {
|
|
18
|
+
ssr: {
|
|
19
|
+
noExternal: ['@analogjs/router', '@angular/**'],
|
|
20
|
+
},
|
|
21
|
+
optimizeDeps: {
|
|
22
|
+
include: ['rxjs'],
|
|
23
|
+
exclude: ['@analogjs/router', '@angular/platform-server'],
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
},
|
|
14
28
|
{
|
|
15
29
|
name: 'analogjs-router-invalidate-routes',
|
|
16
30
|
configureServer(server) {
|
|
17
31
|
function invalidateRoutes(path) {
|
|
18
|
-
if (path.includes(
|
|
32
|
+
if (path.includes(`/app/routes/`)) {
|
|
19
33
|
server.moduleGraph.fileToModulesMap.forEach((mods) => {
|
|
20
34
|
mods.forEach((mod) => {
|
|
21
35
|
if (mod.id?.includes('@analogjs_router.js')) {
|
|
@@ -38,4 +52,4 @@ function routerPlugin() {
|
|
|
38
52
|
];
|
|
39
53
|
}
|
|
40
54
|
exports.routerPlugin = routerPlugin;
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsWUFBWTtJQUMxQixPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUUsd0JBQXdCO1lBQzlCLE1BQU07Z0JBQ0osT0FBTztvQkFDTCxHQUFHLEVBQUU7d0JBQ0gsVUFBVSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO3FCQUNoRDtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO3dCQUNqQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSwwQkFBMEIsQ0FBQztxQkFDMUQ7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLG1DQUFtQztZQUN6QyxlQUFlLENBQUMsTUFBTTtnQkFDcEIsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFZO29CQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7d0JBQ2pDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQ0FDbkIsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO29DQUMzQyxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29DQUV6QyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dDQUM1QixNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29DQUMzQyxDQUFDLENBQUMsQ0FBQztpQ0FDSjs0QkFDSCxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsQ0FBQzt3QkFFSCxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzs0QkFDYixJQUFJLEVBQUUsYUFBYTt5QkFDcEIsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUM7Z0JBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hELENBQUM7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBNUNELG9DQTRDQyJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const h3_1 = require("h3");
|
|
4
|
+
exports.default = (0, h3_1.eventHandler)(async (event) => {
|
|
5
|
+
if (event.req.url?.startsWith('/api')) {
|
|
6
|
+
return $fetch(`${event.req.url?.replace('/api', '')}`);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3J1bnRpbWUvYXBpLW1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBa0M7QUFFbEMsa0JBQWUsSUFBQSxpQkFBWSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUMxQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNyQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3hEO0FBQ0gsQ0FBQyxDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const h3_1 = require("h3");
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
const _imports_1 = require("#imports");
|
|
6
|
+
exports.default = (0, h3_1.eventHandler)(async (event) => {
|
|
7
|
+
// @ts-ignore
|
|
8
|
+
const render = (await Promise.resolve().then(() => require('#build/../ssr/main.server.mjs')))['default'];
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
const template = await (0, _imports_1.useStorage)().getItem(`/assets/public:index.html`);
|
|
11
|
+
const html = await render(event.req.url, template);
|
|
12
|
+
return html;
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3J1bnRpbWUvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBa0M7QUFDbEMsYUFBYTtBQUNiLHVDQUFzQztBQUV0QyxrQkFBZSxJQUFBLGlCQUFZLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzFDLGFBQWE7SUFDYixNQUFNLE1BQU0sR0FBRyxDQUFDLDJDQUFhLCtCQUErQixFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUxRSxhQUFhO0lBQ2IsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLHFCQUFVLEdBQUUsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUV6RSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVuRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildSSRApp = void 0;
|
|
4
|
+
const vite_1 = require("vite");
|
|
5
|
+
async function buildSSRApp(config, options) {
|
|
6
|
+
const ssrBuildConfig = (0, vite_1.mergeConfig)(config, {
|
|
7
|
+
build: {
|
|
8
|
+
ssr: true,
|
|
9
|
+
rollupOptions: {
|
|
10
|
+
input: options?.entryServer || './src/main.server.ts',
|
|
11
|
+
},
|
|
12
|
+
outDir: options?.ssrBuildDir || './dist/ssr',
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
await (0, vite_1.build)(ssrBuildConfig);
|
|
16
|
+
}
|
|
17
|
+
exports.buildSSRApp = buildSSRApp;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3Nzci9idWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBc0Q7QUFHL0MsS0FBSyxVQUFVLFdBQVcsQ0FBQyxNQUFrQixFQUFFLE9BQWlCO0lBQ3JFLE1BQU0sY0FBYyxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLEVBQUU7UUFDekMsS0FBSyxFQUFFO1lBQ0wsR0FBRyxFQUFFLElBQUk7WUFDVCxhQUFhLEVBQUU7Z0JBQ2IsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLElBQUksc0JBQXNCO2FBQ3REO1lBQ0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLElBQUksWUFBWTtTQUM3QztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sSUFBQSxZQUFLLEVBQUMsY0FBYyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQVpELGtDQVlDIn0=
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// SSR dev server, middleware and error page source modified from
|
|
3
|
+
// https://github.com/solidjs/solid-start/blob/main/packages/start/dev/server.js
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.devServerPlugin = void 0;
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const fs = require("fs");
|
|
8
|
+
function devServerPlugin(options) {
|
|
9
|
+
const entryServer = options.entryServer || 'src/main.server.ts';
|
|
10
|
+
const index = options.index || 'index.html';
|
|
11
|
+
return {
|
|
12
|
+
name: 'analogjs-dev-ssr-plugin',
|
|
13
|
+
config() {
|
|
14
|
+
return {
|
|
15
|
+
resolve: {
|
|
16
|
+
alias: {
|
|
17
|
+
'~analog/entry-server': entryServer,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
configureServer(viteServer) {
|
|
23
|
+
return async () => {
|
|
24
|
+
remove_html_middlewares(viteServer.middlewares);
|
|
25
|
+
viteServer.middlewares.use(async (req, res) => {
|
|
26
|
+
let template = fs.readFileSync(path.resolve(viteServer.config.root, index), 'utf-8');
|
|
27
|
+
template = await viteServer.transformIndexHtml(req.originalUrl, template);
|
|
28
|
+
try {
|
|
29
|
+
const entryServer = (await viteServer.ssrLoadModule('~analog/entry-server'))['default'];
|
|
30
|
+
const result = await entryServer(req.originalUrl, template);
|
|
31
|
+
res.end(result);
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
viteServer && viteServer.ssrFixStacktrace(e);
|
|
35
|
+
res.statusCode = 500;
|
|
36
|
+
res.end(`
|
|
37
|
+
<!DOCTYPE html>
|
|
38
|
+
<html lang="en">
|
|
39
|
+
<head>
|
|
40
|
+
<meta charset="UTF-8" />
|
|
41
|
+
<title>Error</title>
|
|
42
|
+
<script type="module">
|
|
43
|
+
import { ErrorOverlay } from '/@vite/client'
|
|
44
|
+
document.body.appendChild(new ErrorOverlay(${JSON.stringify(prepareError(req, e)).replace(/</g, '\\u003c')}))
|
|
45
|
+
</script>
|
|
46
|
+
</head>
|
|
47
|
+
<body>
|
|
48
|
+
</body>
|
|
49
|
+
</html>
|
|
50
|
+
`);
|
|
51
|
+
throw e;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
exports.devServerPlugin = devServerPlugin;
|
|
59
|
+
/**
|
|
60
|
+
* Removes Vite internal middleware
|
|
61
|
+
*
|
|
62
|
+
* @param server
|
|
63
|
+
*/
|
|
64
|
+
function remove_html_middlewares(server) {
|
|
65
|
+
const html_middlewares = [
|
|
66
|
+
'viteIndexHtmlMiddleware',
|
|
67
|
+
'vite404Middleware',
|
|
68
|
+
'viteSpaFallbackMiddleware',
|
|
69
|
+
];
|
|
70
|
+
for (let i = server.stack.length - 1; i > 0; i--) {
|
|
71
|
+
// @ts-ignore
|
|
72
|
+
if (html_middlewares.includes(server.stack[i].handle.name)) {
|
|
73
|
+
server.stack.splice(i, 1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Formats error for SSR message in error overlay
|
|
79
|
+
* @param req
|
|
80
|
+
* @param error
|
|
81
|
+
* @returns
|
|
82
|
+
*/
|
|
83
|
+
function prepareError(req, error) {
|
|
84
|
+
const e = error;
|
|
85
|
+
return {
|
|
86
|
+
message: `An error occured while server rendering ${req.url}:\n\n\t${typeof e === 'string' ? e : e.message} `,
|
|
87
|
+
stack: typeof e === 'string' ? '' : e.stack,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXNlcnZlci1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3Nzci9kZXYtc2VydmVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUVBQWlFO0FBQ2pFLGdGQUFnRjs7O0FBR2hGLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFPekIsU0FBZ0IsZUFBZSxDQUFDLE9BQXNCO0lBQ3BELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksb0JBQW9CLENBQUM7SUFDaEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUM7SUFFNUMsT0FBTztRQUNMLElBQUksRUFBRSx5QkFBeUI7UUFDL0IsTUFBTTtZQUNKLE9BQU87Z0JBQ0wsT0FBTyxFQUFFO29CQUNQLEtBQUssRUFBRTt3QkFDTCxzQkFBc0IsRUFBRSxXQUFXO3FCQUNwQztpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsZUFBZSxDQUFDLFVBQVU7WUFDeEIsT0FBTyxLQUFLLElBQUksRUFBRTtnQkFDaEIsdUJBQXVCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRCxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUM1QyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUMzQyxPQUFPLENBQ1IsQ0FBQztvQkFFRixRQUFRLEdBQUcsTUFBTSxVQUFVLENBQUMsa0JBQWtCLENBQzVDLEdBQUcsQ0FBQyxXQUFxQixFQUN6QixRQUFRLENBQ1QsQ0FBQztvQkFFRixJQUFJO3dCQUNGLE1BQU0sV0FBVyxHQUFHLENBQ2xCLE1BQU0sVUFBVSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUN2RCxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNiLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQzVELEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ2pCO29CQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUNWLFVBQVUsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBVSxDQUFDLENBQUM7d0JBQ3RELEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO3dCQUNyQixHQUFHLENBQUMsR0FBRyxDQUFDOzs7Ozs7OztpRUFRNkMsSUFBSSxDQUFDLFNBQVMsQ0FDekQsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FDckIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQzs7Ozs7O2FBTWpDLENBQUMsQ0FBQzt3QkFFSCxNQUFNLENBQUMsQ0FBQztxQkFDVDtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQTlERCwwQ0E4REM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxNQUFvQztJQUNuRSxNQUFNLGdCQUFnQixHQUFHO1FBQ3ZCLHlCQUF5QjtRQUN6QixtQkFBbUI7UUFDbkIsMkJBQTJCO0tBQzVCLENBQUM7SUFDRixLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hELGFBQWE7UUFDYixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxRCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0I7S0FDRjtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsWUFBWSxDQUFDLEdBQTRCLEVBQUUsS0FBYztJQUNoRSxNQUFNLENBQUMsR0FBRyxLQUFjLENBQUM7SUFDekIsT0FBTztRQUNMLE9BQU8sRUFBRSwyQ0FBMkMsR0FBRyxDQUFDLEdBQUcsVUFDekQsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUNoQyxHQUFHO1FBQ0gsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztLQUM1QyxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ssrBuildPlugin = void 0;
|
|
4
|
+
function ssrBuildPlugin() {
|
|
5
|
+
return {
|
|
6
|
+
name: 'analogjs-ssr-build-plugin',
|
|
7
|
+
config(_config) {
|
|
8
|
+
return {
|
|
9
|
+
resolve: {
|
|
10
|
+
alias: {
|
|
11
|
+
'zone.js/node': 'zone.js/bundles/zone-node.umd.js',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
},
|
|
16
|
+
transform(code, id) {
|
|
17
|
+
// Remove usage of `with()` in sloppy.js file
|
|
18
|
+
if (id.includes('domino/lib/sloppy.js')) {
|
|
19
|
+
return {
|
|
20
|
+
code: code.replace(/with\(/gi, 'if('),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Convert usage of xhr2 default import
|
|
24
|
+
if (code.includes('new xhr2.')) {
|
|
25
|
+
return {
|
|
26
|
+
code: code.replace('new xhr2.', 'new xhr2.default.'),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
exports.ssrBuildPlugin = ssrBuildPlugin;
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWJ1aWxkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvc3NyL3Nzci1idWlsZC1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsU0FBZ0IsY0FBYztJQUM1QixPQUFPO1FBQ0wsSUFBSSxFQUFFLDJCQUEyQjtRQUNqQyxNQUFNLENBQUMsT0FBTztZQUNaLE9BQU87Z0JBQ0wsT0FBTyxFQUFFO29CQUNQLEtBQUssRUFBRTt3QkFDTCxjQUFjLEVBQUUsa0NBQWtDO3FCQUNuRDtpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2hCLDZDQUE2QztZQUM3QyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRTtnQkFDdkMsT0FBTztvQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO2lCQUN0QyxDQUFDO2FBQ0g7WUFFRCx1Q0FBdUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUM5QixPQUFPO29CQUNMLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQztpQkFDckQsQ0FBQzthQUNIO1lBRUQsT0FBTztRQUNULENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQTlCRCx3Q0E4QkMifQ==
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { NitroConfig } from 'nitropack';
|
|
2
2
|
import { Plugin } from 'vite';
|
|
3
|
-
|
|
3
|
+
import { Options } from './options';
|
|
4
|
+
export declare function viteNitroPlugin(options?: Options, nitroOptions?: NitroConfig): Plugin;
|
|
@@ -3,31 +3,64 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.viteNitroPlugin = void 0;
|
|
4
4
|
const load_esm_1 = require("@angular-devkit/build-angular/src/utils/load-esm");
|
|
5
5
|
const h3_1 = require("h3");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
const build_server_1 = require("./build-server");
|
|
7
|
+
const build_1 = require("./ssr/build");
|
|
8
|
+
function viteNitroPlugin(options, nitroOptions) {
|
|
9
|
+
const rootDir = nitroOptions?.rootDir || '.';
|
|
10
|
+
const isTest = process.env['NODE_ENV'] === 'test' || !!process.env['VITEST'];
|
|
11
|
+
let nitroConfig = {
|
|
12
|
+
rootDir,
|
|
13
|
+
logLevel: 0,
|
|
14
|
+
srcDir: `${rootDir}/src`,
|
|
15
|
+
scanDirs: [`${rootDir}/src/server`],
|
|
11
16
|
output: {
|
|
12
|
-
dir: '
|
|
13
|
-
...
|
|
17
|
+
dir: '../dist/server',
|
|
18
|
+
...nitroOptions?.output,
|
|
14
19
|
},
|
|
15
|
-
buildDir: '
|
|
16
|
-
|
|
20
|
+
buildDir: './dist/.nitro',
|
|
21
|
+
typescript: {
|
|
22
|
+
generateTsConfig: false,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
if (options?.ssr) {
|
|
26
|
+
nitroConfig = {
|
|
27
|
+
...nitroConfig,
|
|
28
|
+
publicAssets: [{ dir: `../dist/client` }],
|
|
29
|
+
serverAssets: [{ baseName: 'public', dir: `./dist/client` }],
|
|
30
|
+
externals: {
|
|
31
|
+
inline: ['zone.js/node'],
|
|
32
|
+
external: ['rxjs', 'node-fetch-native/dist/polyfill', 'destr'],
|
|
33
|
+
},
|
|
34
|
+
moduleSideEffects: ['zone.js/bundles/zone-node.umd.js'],
|
|
35
|
+
renderer: `${__dirname}/runtime/renderer`,
|
|
36
|
+
handlers: [
|
|
37
|
+
{ handler: `${__dirname}/runtime/api-middleware`, middleware: true },
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
nitroConfig = {
|
|
42
|
+
...nitroConfig,
|
|
43
|
+
...nitroOptions,
|
|
17
44
|
};
|
|
18
45
|
let isBuild = false;
|
|
19
46
|
let isServe = false;
|
|
20
|
-
let
|
|
47
|
+
let ssrBuild = false;
|
|
48
|
+
let config;
|
|
21
49
|
return {
|
|
22
|
-
name: 'vite-nitro-plugin',
|
|
50
|
+
name: 'analogjs-vite-nitro-plugin',
|
|
23
51
|
config(_config, { command }) {
|
|
24
52
|
isServe = command === 'serve';
|
|
25
53
|
isBuild = command === 'build';
|
|
54
|
+
ssrBuild = _config.build?.ssr === true;
|
|
55
|
+
config = _config;
|
|
26
56
|
},
|
|
27
57
|
async configureServer(viteServer) {
|
|
28
58
|
if (isServe && !isTest) {
|
|
29
59
|
const { createNitro, createDevServer, build, prepare } = await (0, load_esm_1.loadEsmModule)('nitropack');
|
|
30
|
-
const nitro = await createNitro({
|
|
60
|
+
const nitro = await createNitro({
|
|
61
|
+
dev: true,
|
|
62
|
+
...nitroConfig,
|
|
63
|
+
});
|
|
31
64
|
const server = createDevServer(nitro);
|
|
32
65
|
await prepare(nitro);
|
|
33
66
|
await build(nitro);
|
|
@@ -36,20 +69,20 @@ function viteNitroPlugin(opts) {
|
|
|
36
69
|
}
|
|
37
70
|
},
|
|
38
71
|
async closeBundle() {
|
|
72
|
+
if (ssrBuild) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
39
75
|
if (isBuild) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
await prepare(nitro);
|
|
47
|
-
await build(nitro);
|
|
48
|
-
await nitro.close();
|
|
76
|
+
if (options?.ssr) {
|
|
77
|
+
console.log('Building SSR application...');
|
|
78
|
+
await (0, build_1.buildSSRApp)(config, options);
|
|
79
|
+
}
|
|
80
|
+
console.log('Building Server...');
|
|
81
|
+
await (0, build_server_1.buildServer)(options, nitroConfig);
|
|
49
82
|
console.log(`\n\nThe '@analogjs/platform' server has been successfully built.`);
|
|
50
83
|
}
|
|
51
84
|
},
|
|
52
85
|
};
|
|
53
86
|
}
|
|
54
87
|
exports.viteNitroPlugin = viteNitroPlugin;
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1uaXRyby1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3ZpdGUtbml0cm8tcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUFpRjtBQUVqRiwyQkFBb0M7QUFHcEMsaURBQTZDO0FBQzdDLHVDQUEwQztBQUUxQyxTQUFnQixlQUFlLENBQzdCLE9BQWlCLEVBQ2pCLFlBQTBCO0lBRTFCLE1BQU0sT0FBTyxHQUFHLFlBQVksRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDO0lBQzdDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTdFLElBQUksV0FBVyxHQUFnQjtRQUM3QixPQUFPO1FBQ1AsUUFBUSxFQUFFLENBQUM7UUFDWCxNQUFNLEVBQUUsR0FBRyxPQUFPLE1BQU07UUFDeEIsUUFBUSxFQUFFLENBQUMsR0FBRyxPQUFPLGFBQWEsQ0FBQztRQUNuQyxNQUFNLEVBQUU7WUFDTixHQUFHLEVBQUUsZ0JBQWdCO1lBQ3JCLEdBQUcsWUFBWSxFQUFFLE1BQU07U0FDeEI7UUFDRCxRQUFRLEVBQUUsZUFBZTtRQUN6QixVQUFVLEVBQUU7WUFDVixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCO0tBQ0YsQ0FBQztJQUVGLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNoQixXQUFXLEdBQUc7WUFDWixHQUFHLFdBQVc7WUFDZCxZQUFZLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pDLFlBQVksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDNUQsU0FBUyxFQUFFO2dCQUNULE1BQU0sRUFBRSxDQUFDLGNBQWMsQ0FBQztnQkFDeEIsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxFQUFFLE9BQU8sQ0FBQzthQUMvRDtZQUNELGlCQUFpQixFQUFFLENBQUMsa0NBQWtDLENBQUM7WUFDdkQsUUFBUSxFQUFFLEdBQUcsU0FBUyxtQkFBbUI7WUFDekMsUUFBUSxFQUFFO2dCQUNSLEVBQUUsT0FBTyxFQUFFLEdBQUcsU0FBUyx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO2FBQ3JFO1NBQ0YsQ0FBQztLQUNIO0lBRUQsV0FBVyxHQUFHO1FBQ1osR0FBRyxXQUFXO1FBQ2QsR0FBRyxZQUFZO0tBQ2hCLENBQUM7SUFFRixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDcEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNyQixJQUFJLE1BQWtCLENBQUM7SUFFdkIsT0FBTztRQUNMLElBQUksRUFBRSw0QkFBNEI7UUFDbEMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRTtZQUN6QixPQUFPLEdBQUcsT0FBTyxLQUFLLE9BQU8sQ0FBQztZQUM5QixPQUFPLEdBQUcsT0FBTyxLQUFLLE9BQU8sQ0FBQztZQUM5QixRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDO1lBQ3ZDLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDbkIsQ0FBQztRQUNELEtBQUssQ0FBQyxlQUFlLENBQUMsVUFBeUI7WUFDN0MsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FDcEQsTUFBTSxJQUFBLHdCQUFhLEVBQTZCLFdBQVcsQ0FBQyxDQUFDO2dCQUUvRCxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQztvQkFDOUIsR0FBRyxFQUFFLElBQUk7b0JBQ1QsR0FBRyxXQUFXO2lCQUNmLENBQUMsQ0FBQztnQkFDSCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUEsbUJBQWMsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FDVCwwR0FBMEcsQ0FDM0csQ0FBQzthQUNIO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyxXQUFXO1lBQ2YsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osT0FBTzthQUNSO1lBRUQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7b0JBQzNDLE1BQU0sSUFBQSxtQkFBVyxFQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDcEM7Z0JBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLElBQUEsMEJBQVcsRUFBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBRXhDLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsa0VBQWtFLENBQ25FLENBQUM7YUFDSDtRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQWhHRCwwQ0FnR0MifQ==
|