@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/platform",
3
- "version": "0.1.0-beta.2",
3
+ "version": "0.1.0-beta.4",
4
4
  "type": "commonjs",
5
5
  "description": "The fullstack meta-framework for Angular",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -0,0 +1,3 @@
1
+ import { NitroConfig } from 'nitropack';
2
+ import { Options } from './options';
3
+ export declare function buildServer(options?: Options, nitroConfig?: NitroConfig): Promise<void>;
@@ -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=
@@ -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
- function platformPlugin(opts) {
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
- ...(0, vite_plugin_angular_1.default)(opts?.vite),
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9wbGF0Zm9ybS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdUVBQW9EO0FBRXBELDJEQUFzRDtBQUN0RCxtREFBK0M7QUFFL0MsU0FBZ0IsY0FBYyxDQUFDLElBQWM7SUFDM0MsT0FBTztRQUNMLElBQUEsbUNBQWUsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQzVCLEdBQUcsSUFBQSw2QkFBTyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUM7UUFDdEIsR0FBRyxJQUFBLDRCQUFZLEdBQUU7S0FDbEIsQ0FBQztBQUNKLENBQUM7QUFORCx3Q0FNQyJ9
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9wbGF0Zm9ybS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdUVBQW9EO0FBRXBELDJEQUFzRDtBQUN0RCxtREFBK0M7QUFDL0MsK0RBQTBEO0FBQzFELDZEQUF3RDtBQUV4RCxTQUFnQixjQUFjLENBQUMsT0FBZ0IsRUFBRTtJQUMvQyxPQUFPO1FBQ0wsSUFBQSxtQ0FBZSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQ2xDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBQSxpQ0FBYyxHQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBVztRQUMvQyxHQUFHLElBQUEsNEJBQVksR0FBRTtRQUNqQixDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ1AsQ0FBQyxDQUFDLElBQUEsbUNBQWUsRUFBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEQsQ0FBQyxDQUFDLEtBQUssQ0FBVztRQUNwQixHQUFHLElBQUEsNkJBQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0tBQ3ZCLENBQUM7QUFDSixDQUFDO0FBVkQsd0NBVUMifQ==
@@ -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(`${server.config.root}/app/routes`)) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsWUFBWTtJQUMxQixPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUUsbUNBQW1DO1lBQ3pDLGVBQWUsQ0FBQyxNQUFNO2dCQUNwQixTQUFTLGdCQUFnQixDQUFDLElBQVk7b0JBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxhQUFhLENBQUMsRUFBRTt3QkFDckQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dDQUNuQixJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7b0NBQzNDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBRXpDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0NBQzVCLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBQzNDLENBQUMsQ0FBQyxDQUFDO2lDQUNKOzRCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxDQUFDO3dCQUVILE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRCQUNiLElBQUksRUFBRSxhQUFhO3lCQUNwQixDQUFDLENBQUM7cUJBQ0o7Z0JBQ0gsQ0FBQztnQkFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDaEQsQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUE5QkQsb0NBOEJDIn0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsWUFBWTtJQUMxQixPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUUsd0JBQXdCO1lBQzlCLE1BQU07Z0JBQ0osT0FBTztvQkFDTCxHQUFHLEVBQUU7d0JBQ0gsVUFBVSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO3FCQUNoRDtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO3dCQUNqQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSwwQkFBMEIsQ0FBQztxQkFDMUQ7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLG1DQUFtQztZQUN6QyxlQUFlLENBQUMsTUFBTTtnQkFDcEIsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFZO29CQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7d0JBQ2pDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQ0FDbkIsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO29DQUMzQyxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29DQUV6QyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dDQUM1QixNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29DQUMzQyxDQUFDLENBQUMsQ0FBQztpQ0FDSjs0QkFDSCxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsQ0FBQzt3QkFFSCxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzs0QkFDYixJQUFJLEVBQUUsYUFBYTt5QkFDcEIsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUM7Z0JBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hELENBQUM7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBNUNELG9DQTRDQyJ9
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<unknown>;
2
+ export default _default;
@@ -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,2 @@
1
+ declare const _default: import("h3").EventHandler<any>;
2
+ export default _default;
@@ -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,3 @@
1
+ import { UserConfig } from 'vite';
2
+ import { Options } from '../options';
3
+ export declare function buildSSRApp(config: UserConfig, options?: Options): Promise<void>;
@@ -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,7 @@
1
+ import { Plugin } from 'vite';
2
+ interface ServerOptions {
3
+ index?: string;
4
+ entryServer?: string;
5
+ }
6
+ export declare function devServerPlugin(options: ServerOptions): Plugin;
7
+ export {};
@@ -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,2 @@
1
+ import { Plugin } from 'vite';
2
+ export declare function ssrBuildPlugin(): Plugin;
@@ -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
- export declare function viteNitroPlugin(opts?: NitroConfig): Plugin;
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
- function viteNitroPlugin(opts) {
7
- const nitroConfig = {
8
- rootDir: 'src',
9
- srcDir: 'src/server',
10
- scanDirs: ['src/server'],
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: '../../dist/server',
13
- ...opts?.output,
17
+ dir: '../dist/server',
18
+ ...nitroOptions?.output,
14
19
  },
15
- buildDir: '../dist/.nitro',
16
- ...opts,
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 isTest = process.env['NODE_ENV'] === 'test' || !!process.env['VITEST'];
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({ ...nitroConfig, dev: true });
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
- const { createNitro, build, prepare } = await (0, load_esm_1.loadEsmModule)('nitropack');
41
- const nitro = await createNitro({
42
- ...nitroConfig,
43
- baseURL: '/api',
44
- dev: false,
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1uaXRyby1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3ZpdGUtbml0cm8tcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUFpRjtBQUVqRiwyQkFBb0M7QUFHcEMsU0FBZ0IsZUFBZSxDQUFDLElBQWtCO0lBQ2hELE1BQU0sV0FBVyxHQUFnQjtRQUMvQixPQUFPLEVBQUUsS0FBSztRQUNkLE1BQU0sRUFBRSxZQUFZO1FBQ3BCLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQztRQUN4QixNQUFNLEVBQUU7WUFDTixHQUFHLEVBQUUsbUJBQW1CO1lBQ3hCLEdBQUcsSUFBSSxFQUFFLE1BQU07U0FDaEI7UUFDRCxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLEdBQUcsSUFBSTtLQUNSLENBQUM7SUFDRixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDcEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNFLE9BQU87UUFDTCxJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUU7WUFDekIsT0FBTyxHQUFHLE9BQU8sS0FBSyxPQUFPLENBQUM7WUFDOUIsT0FBTyxHQUFHLE9BQU8sS0FBSyxPQUFPLENBQUM7UUFDaEMsQ0FBQztRQUNELEtBQUssQ0FBQyxlQUFlLENBQUMsVUFBeUI7WUFDN0MsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FDcEQsTUFBTSxJQUFBLHdCQUFhLEVBQTZCLFdBQVcsQ0FBQyxDQUFDO2dCQUUvRCxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUEsbUJBQWMsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FDVCwwR0FBMEcsQ0FDM0csQ0FBQzthQUNIO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyxXQUFXO1lBQ2YsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFBLHdCQUFhLEVBRXpELFdBQVcsQ0FBQyxDQUFDO2dCQUVmLE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDO29CQUM5QixHQUFHLFdBQVc7b0JBQ2QsT0FBTyxFQUFFLE1BQU07b0JBQ2YsR0FBRyxFQUFFLEtBQUs7aUJBQ1gsQ0FBQyxDQUFDO2dCQUNILE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsa0VBQWtFLENBQ25FLENBQUM7YUFDSDtRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQXpERCwwQ0F5REMifQ==
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1uaXRyby1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3ZpdGUtbml0cm8tcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUFpRjtBQUVqRiwyQkFBb0M7QUFHcEMsaURBQTZDO0FBQzdDLHVDQUEwQztBQUUxQyxTQUFnQixlQUFlLENBQzdCLE9BQWlCLEVBQ2pCLFlBQTBCO0lBRTFCLE1BQU0sT0FBTyxHQUFHLFlBQVksRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDO0lBQzdDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTdFLElBQUksV0FBVyxHQUFnQjtRQUM3QixPQUFPO1FBQ1AsUUFBUSxFQUFFLENBQUM7UUFDWCxNQUFNLEVBQUUsR0FBRyxPQUFPLE1BQU07UUFDeEIsUUFBUSxFQUFFLENBQUMsR0FBRyxPQUFPLGFBQWEsQ0FBQztRQUNuQyxNQUFNLEVBQUU7WUFDTixHQUFHLEVBQUUsZ0JBQWdCO1lBQ3JCLEdBQUcsWUFBWSxFQUFFLE1BQU07U0FDeEI7UUFDRCxRQUFRLEVBQUUsZUFBZTtRQUN6QixVQUFVLEVBQUU7WUFDVixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCO0tBQ0YsQ0FBQztJQUVGLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNoQixXQUFXLEdBQUc7WUFDWixHQUFHLFdBQVc7WUFDZCxZQUFZLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pDLFlBQVksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDNUQsU0FBUyxFQUFFO2dCQUNULE1BQU0sRUFBRSxD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